首先,要了解两者的区别,就要清楚scrapy-redis是如何产生的,有需求才会有发展,社会在日新月异的飞速发展,大量相似网页框架的飞速产生,人们已经不满足于当前爬取网页的速度,因此有了分布式爬虫,让其可以并行的爬取更多但又不尽相同的网页,这样大大节省了之前同步完成页面爬取所浪费的时间,同步与异步的差距不是一点点的,所以scrapy-redis更加适应于当前形势。好了,步入正轨。

  两者的主要区别就是scrapy-redis在scrapy的基础上增加了redis数据库,同时呢,由于这个redis数据库的存在,就导致了几大新增组件应运而生,---可以实现分布式爬虫,---简单url去重,---持续性爬取,增量式爬虫,---以及遵守Rule规则可以实现深度爬虫等等。下面具体阐述在redis加入之后造成的具体模块改变。

一、Scheduler(调度器模块)

  Scheduler 负责对新的 request 迕行入列和出列的操作。 Scrapy 本身丌支持爬虫分布式,多个 spider 丌能共享待爬取队列 Scrapy queue, scrapy-redis 把 Scrapy queue 换成 redis 数据库,用同一个 redis-server 存放要爬 取的 request,便能让多个 spider 去同一个数据库里读取。

二、Duplication Filter(redis  set去重)

  Duplication Filter 利用了 redis 的 set 不重复的特性实现去重 scrapy-redis 调度器从引擎接受 request,将 request 的指纹存⼊redis 的 set 检查是否重 复,并将丌重复的 request push 写⼊redis 的 request queue。引擎请求 request(Spider 发出的)时,调度器从 redis 的 request queue 队列⾥里根据优 先级 pop 出⼀个 request 迒回给引擎,引擎将此 request 发给 spider 处理。

三、Item Pipeline(管道模块)

  引擎将爬取到的 Item 传给 Item Pipeline,scrapy-redis 的 Item Pipeline 将爬取到的 Item 存⼊redis 的 items queue。

四、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与scrapy-redis的区别的更多相关文章

  1. <scrapy爬虫>scrapy命令行操作

    1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...

  2. python爬虫scrapy之scrapy终端(Scrapy shell)

    Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码. 其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码. ...

  3. 第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...

  4. Scrapy之Scrapy shell

    Scrapy Shell Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据 ...

  5. 十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --upgrade pip2.安装,wheel(建议网络安装) pip install wheel ...

  6. Django缓存系统选择之Memcached与Redis的区别与性能对比

    Django支持使用Memcached和Redis这两种流行的内存型数据库作为缓存系统.我们今天来看Memcached和Redis的区别和性能对比. redis和memcached的区别 1.Redi ...

  7. scrapy - 给scrapy 的spider 传值

    scrapy - 给scrapy 的spider 传值 方法一: 在命令行用crawl控制spider爬取的时候,加上-a选项,例如: scrapy crawl myspider -a categor ...

  8. MySql、Mongodb和Redis的区别

    NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路. M ...

  9. python - scrapy 爬虫框架 ( redis去重 )

    1.  使用内置,并加以修改 ( 自定义 redis 存储的 keys ) settings 配置 # ############### scrapy redis连接 ################# ...

  10. Scrapy中scrapy.Request和response.follow的区别

    在写scrapy的spider类的parse方法的时候,有些链接需要提取出来继续爬取,这里scrapy提供了一些方法可以方便的实现这个功能,总结如下: 假设我们的目标a标签是target_a 方法1: ...

随机推荐

  1. Windows 10 中CPU虚拟化已开启,但是docker无法运行

    在管理员模式下的PowerShell中执行: bcdedit /set hypervisorlaunchtype Auto 然后重启电脑即可

  2. Mysql 性能优化及问题

    MySQL max_allowed_packet设置及问题 查看 max_allowed_packet show VARIABLES like '%max_allowed_packet%'; 以下内容 ...

  3. 为什么磁盘慢会导致Linux负载飙升?

    一.CPU利用率和负载率的区别 这里要区别CPU负载和CPU利用率,它们是不同的两个概念,但它们的信息可以在同一个top命令中进行显示.CPU利用率显示的是程序在运行期间实时占用的CPU百分比,这是对 ...

  4. Apache Solr Velocity模板远程代码执行复现

    0x01漏洞描述 2019年10月31日,国外安全研究员s00py在Github公开了一个Apache Solr Velocity模板注入远程命令执行的poc. 经过研究,发现该0day漏洞真实有效并 ...

  5. Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析

    像Mybatis.Hibernate这样的ORM框架,封装了JDBC的大部分操作,极大的简化了我们对数据库的操作. 在实际项目中,我们发现在一个事务中查询同样的语句两次的时候,第二次没有进行数据库查询 ...

  6. Abp vNext 自定义 Ef Core 仓储引发异常

    问题 在使用自定义 Ef Core 仓储和 ABP vNext 注入的默认仓储时,通过两个 Repository 进行 Join 操作,提示 Cannot use multiple DbContext ...

  7. Kubernetes(k8s)集群安装

    一:简介 二:基础环境安装 1.系统环境 os Role ip Memory Centos 7 master01 192.168.25.30 4G Centos 7 node01 192.168.25 ...

  8. 项目——基于httpd镜像演示Dockerfile所有的指令

    基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...

  9. Elasticsearch生产环境遇到的问题以及解决方案

    Elasticsearch是一个开源的分布式实时搜索与分析引擎,支持云服务.它是基于Apache Lucene搜索引擎的类库创建的,提供了全文搜索能力.多语言支持.专门的查询语言.支持地理位置服务.基 ...

  10. rabittmq详解

    交换机(exchange): 声明交换机: Name Durability (消息代理重启后,交换机是否还存在) Auto-delete (当所有与之绑定的消息队列都完成了对此交换机的使用后,删掉它) ...