scrapy-redis源代码分析

Posted wzjhoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy-redis源代码分析相关的知识,希望对你有一定的参考价值。

原创文章,链接:http://blog.csdn.net/u012150179/article/details/38226253

技术分享  +  技术分享

(I) connection.py

负责依据setting中配置实例化redis连接。被dupefilter和scheduler调用。总之涉及到redis存取的都要使用到这个模块。

(II) dupefilter.py

负责运行requst的去重。实现的非常有技巧性,使用redis的set数据结构。可是注意scheduler并不使用当中用于在这个模块中实现的dupefilter键做request的调度。而是使用queue.py模块中实现的queue。
当request不反复时,将其存入到queue中。调度时将其弹出。

(III)queue.py

其作用如II所述,可是这里实现了三种方式的queue:
FIFO的SpiderQueue,SpiderPriorityQueue。以及LIFI的SpiderStack。默认使用的是第二中。这也就是出现之前文章中所分析情况的原因(链接:)。

(IV)pipelines.py

这是是用来实现分布式处理的作用。它将Item存储在redis中以实现分布式处理。


另外能够发现,相同是编写pipelines,在这里的编码实现不同于文章(链接:)中所分析的情况,因为在这里须要读取配置,所以就用到了from_crawler()函数。

(V)scheduler.py

此扩展是对scrapy中自带的scheduler的替代(在settings的SCHEDULER变量中指出),正是利用此扩展实现crawler的分布式调度。其利用的数据结构来自于queue中实现的数据结构。

scrapy-redis所实现的两种分布式:爬虫分布式以及item处理分布式就是由模块scheduler和模块pipelines实现。上述其他模块作为为二者辅助的功能模块。



(VI)spider.py

设计的这个spider从redis中读取要爬的url,然后运行爬取,若爬取过程中返回很多其它的url,那么继续进行直至全部的request完毕。

之后继续从redis中读取url,循环这个过程。



分析:在这个spider中通过connect signals.spider_idle信号实现对crawler状态的监视。当idle时。返回新的make_requests_from_url(url)给引擎,进而交给调度器调度。



原创文章,链接:http://blog.csdn.net/u012150179/article/details/38226253





















以上是关于scrapy-redis源代码分析的主要内容,如果未能解决你的问题,请参考以下文章

淘搜索之网页抓取系统分析与实现- 实现&总结

爬虫最后一天,爬取到的数据存到mysql中,爬虫和下载中间件加代理cookieheaderselenium随机生成uersagent去重规则源码分析(布隆过滤器)scrapy-redis实现分布式爬虫

scrapy-redis 分布式爬虫爬取房天下网站所有国内城市的新房和二手房信息

scrapy-redis 分布式爬虫爬取房天下网站所有国内城市的新房和二手房信息

scrapy-redis分布式爬虫实战

爬虫 - scrapy-redis分布式爬虫