scrapy-redis 和 scrapy 有什么区别

scrapy 是一个 Python 爬虫框架,爬取效率极高,但是不支持分布式。而 scrapy-redis 是一套基于 redis 数据库、运行在 scrapy 框架之上的组件,可以让 scrapy 支持分布式策略, Slaver 端共享 Master 端 redis 数据库里的 item 队列、请求队列和请求指纹集合。

scrapy-redis 和 scrapy 有什么区别-Worktile社区

一、scrapy-redis

scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署。

  1. scrapy-redis使用redis list存放待爬取的request
  2. scrapy-redis在setting配置SCHEDULER = “scrapy_redis.scheduler.Scheduler”替换原本的待爬取队列。使用redis进行任务分发与调度,把所有待爬取的请求都放入redis,所有爬虫都去redis读取请求。
  3. Scrapy-Redis中的去重是由Duplication Filter组件实现的,该组件利用Redis中set集合不重复的特性,巧妙地实现了这个功能。首先Scrapy-Redis调度器接收引擎递过来的请求,然后将这个请求指纹存入set集合中检查是否重复,并把不重复的请求加入到Redis的请求队列中。
  4. scrapy-redis不再使用原有的Spider类,重写RedisSpider继承Spider和RedisMixin类。当我们生成一个Spider继承RedisSpider时,调用setup_redis函数,这个函数会去连接redis数据库,然后会设置signals(信号):一个是当spider空闲时候的signal,会调用spider_idle函数,这个函数调用schedule_next_request函数,保证spider是一直活着的状态,并且抛出DontCloseSpider异常。一个是当抓到一个item时的signal,会调用item_scraped函数,这个函数会调用schedule_next_request函数,获取下一个request。

二、scrapy

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

  1. 调度器、管道不可以被分布式集群共享
  2. scrapy使用改造后的collection.deque(双端队列)存放待爬取的request
  3. scrapy中跟待爬取队列直接相关的是Scheduler(调度器),scheduler负责对新的requests进行入列操作,把待爬取的队列安装优先级建立字典,根据request中的priority属性做优先级(越小的优先级越高)进行出队列操作(不能共享)。
  4. scrapy把已发送的request指纹放到集合中,下一个request指纹拿到集合中对比,存在说明已经爬取过不继续执行操作。

三、scrapy-redis 和 scrapy 的区别

scrapy 是一个 Python 爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而 scrapy-redis 是一套基于 redis 数据库、运行在 scrapy 框架之上的组件,可以让 scrapy 支持分布式策略, Slaver 端共享 Master 端 redis 数据库里的 item 队列、请求队列和请求指纹集合。

Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。

1、Scheduler

Scrapy改造了python本来的collection.deque(双向队列)形成了自己的Scrapy queue,但是Scrapy多个spider不能共享待爬取队列Scrapy queue, 即Scrapy本身不支持爬虫分布式,scrapy-redis 的解决是把这个Scrapy queue换成redis数据库(也是指redis队列),从同一个redis-server存放要爬取的request,便能让多个spider去同一个数据库里读取。

Scrapy中跟“待爬队列”直接相关的就是调度器Scheduler,它负责对新的request进行入列操作(加入Scrapy queue),取出下一个要爬取的request(从Scrapy queue中取出)等操作。它把待爬队列按照优先级建立了一个字典结构,然后根据request中的优先级,来决定该入哪个队列,出列时则按优先级较小的优先出列。为了管理这个比较高级的队列字典,Scheduler需要提供一系列的方法。但是原来的Scheduler已经无法使用,所以使用Scrapy-redis的scheduler组件。

2、Duplication Filter

Scrapy中用集合实现这个request去重功能,Scrapy中把已经发送的request指纹放入到一个集合中,把下一个request的指纹拿到集合中比对,如果该指纹存在于集合中,说明这个request发送过了,如果没有则继续操作。

在scrapy-redis中去重是由Duplication Filter组件来实现的,它通过redis的set 不重复的特性,巧妙的实现了Duplication Filter去重。scrapy-redis调度器从引擎接受request,将request的指纹存⼊redis的set检查是否重复,并将不重复的request push写⼊redis的 request queue。

引擎请求request(Spider发出的)时,调度器从redis的request queue队列⾥里根据优先级pop 出⼀个request 返回给引擎,引擎将此request发给spider处理。

3、Item Pipeline

引擎将(Spider返回的)爬取到的Item给Item Pipeline,scrapy-redis 的Item Pipeline将爬取到的 Item 存⼊redis的 items queue。修改过Item Pipeline可以很方便的根据 key 从 items queue 提取item,从⽽实现 items processes集群。

4、Base Spider

不在使用scrapy原有的Spider类,重写的RedisSpider继承了Spider和RedisMixin这两个类,RedisMixin是用来从redis读取url的类。

当我们生成一个Spider继承RedisSpider时,调用setup_redis函数,这个函数会去连接redis数据库,然后会设置signals(信号):

  • 一个是当spider空闲时候的signal,会调用spider_idle函数,这个函数调用schedule_next_request函数,保证spider是一直活着的状态,并且抛出DontCloseSpider异常。
  • 一个是当抓到一个item时的signal,会调用item_scraped函数,这个函数会调用schedule_next_request函数,获取下一个request。

延伸阅读

scrapy-redis特征

  1. 分布式爬取:您可以启动多个spider工程,相互之间共享单个redis的requests队列。非常适合广泛的多个域名网站的内容爬取。
  2. 分布式数据处理:爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理。
  3. Scrapy即插即用组件:Scheduler调度器 + Duplication复制 过滤器,Item Pipeline,基本spider。

文章标题:scrapy-redis 和 scrapy 有什么区别,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/34714

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW认证作者
上一篇 2023年1月8日 上午4:49
下一篇 2023年1月8日 上午6:07

相关推荐

  • 管理的本质是什么

    管理的本质是协调资源以实现目标的过程。核心观点包括:1、目标导向、2、资源分配、3、决策制定、4、效率优化、5、风险控制、6、人员动态管理。管理确保各资源以最合理的方式被利用,从而达到预定目标。管理者在此过程中扮演关键角色,制定目标并引导团队向着这些目标前进。资源的有效分配与决策能力直接影响到管理的…

    2023年11月30日
    30500
  • oa网络办公

    标题:OA网络办公的优势与挑战 摘要:随着信息技术的不断发展,OA网络办公成为企业提高效率、降低成本的有效途径。1、提升工作效率:通过集成化的办公系统,员工可快速获取、处理信息;2、地点灵活性:员工能够在任何有网络的地方进行工作,打破地域限制;3、成本节约:减少了对物理办公空间的需求,从而降低租赁和…

    2024年1月16日
    13600
  • Terraform是什么

    Terraform 是一种开源的基础设施即代码(Infrastructure as Code)工具,由 HashiCorp 开发。它允许用户通过声明性配置来管理和配置数据中心资源。与传统的手动设置或脚本化配置不同,Terraform 提供一种更加模块化、可复用和版本化的方式来处理复杂的基础设施。它改…

    2023年7月13日
    46200
  • 什么是ENS

    ENS全称为Ethereum Name Service,是以太坊网络上的一个域名服务。类似于互联网上的DNS,ENS也提供了一种将易于记忆的名称映射到以太坊的方式。通过ENS,用户可以使用类似于“myname.eth”这样的名称来代替复杂的以太坊。 ENS全称为Ethereum Name Servi…

    2023年5月28日
    54400
  • UniApp中的数据绑定和数据流管理技巧是什么

    提升UniApp开发效率与逻辑清晰度的关键在于精通数据绑定和数据流管理技巧。1、使用v-bind实现数据绑定,实现组件或者元素属性与数据状态的同步;2、借助v-model实现表单输入与数据状态的双向绑定,简化数据收集过程;3、运用计算属性computed优化依赖数据的自动更新,提高应用性能;4、利用…

    2023年12月22日
    22300
  • redis的三种过期删除策略是什么

    Redis的三种过期删除策略是:1、惰性删除;2、定时删除;3、周期性删除。惰性删除指当我们对一个设置了过期时间的键进行访问时,Redis会先检查该键是否过期,如果已经过期,则删除该键,不返回任何数据。定时删除指在设置键的过期时间的同时,创建一个定时器,当键到达过期时间时,定时器触发,删除该键。周期…

    2023年7月12日
    40600
  • 项目管理软件的作用是什么

    项目管理软件主要用于协调团队合作、监督任务进展和资源分配、确保按时完成项目目标。1、增强团队协作;2、优化时间管理;3、提升资源利用率;4、风险监控与应对;5、完善的报告与分析。软件提供协作平台可以帮助团队成员实时交流,共同编辑文档,跟踪任务状态,从而提升整体工作效率。 团队协作是项目成功的关键因素…

    2024年1月8日
    13400
  • 有什么好用的数据库

    好用的数据库有:1、MySQL;2、PostgreSQL;3、MongoDB;4、Apache Cassandra;5、SQLite。MySQL是一种开源关系型数据库管理系统,它是最流行的数据库之一。MySQL是一种可扩展性强的数据库,具有高性能、高可靠性、易于使用的特点。 一、MySQL MySQ…

    2023年7月18日
    62600
  • 有什么发布任务的平台

    发布任务的平台有:一、猪八戒;二、淘宝任务;三、人人帮;四、微众传媒;五、Upwork;六、Fiverr。猪八戒是中国最大的服务外包平台之一,成立于2010年。它提供各种服务,包括设计、开发、翻译、营销、文案、客服等,用户可以在平台上发布任务。 一、猪八戒 猪八戒是中国最大的服务外包平台之一,成立于…

    2023年3月31日
    3.5K00
  • 项目管理的三要素有哪些

    摘要:在项目管理中,确保项目的成功实施至关重要的三个主要要素是时间、成本、质量。时间指项目完成必须符合既定的进度计划,保证项目按时交付。成本涉及到项目预算内的资源使用,需要确保项目在批准的预算范围内完成。质量则确保项目的成果满足既定的标准和需求。管理这三个要素的平衡是项目成功的关键,因为它们之间往往…

    2023年11月13日
    56600

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部