分布式scrapy的组件源码介绍完了,大致总结一下,相关组件目录如下:
《scrapy中scrapy_redis分布式内置pipeline源码及其工作原理》
《scrapy_redis中序列化源码及其在程序设计中的应用》
《scrapy_redis分布式组件Connection源码解读及工作原理》
其架构如图:
在对比scrapy架构:
在架构上scrapy_redis比scrapy多了一个中介Redis,正是通过Redis实现的去重和数据储存,同时scrapy_redis实现了四个组件的重写,Scheduler(调度)、Duplication Filter(去重)、 Item Pipeline(数据管道)、Base Spider(爬虫基类)
分布式爬虫运行机制如下:
- 要求运行在不同机器上的源码一致,尤其是Redis的配置,相同的Redis才能实现共同去重和分布式爬虫之间的通信,同时相应的在配置文件setting.py中启用scrapy_Rediszi自定义实现的组件
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
至于pipeline在需要使用Redis储存数据的情况下也可以启用
- Spider开始运行,构造Request对象,然后根据Request对象的URL及其其他headers信息对Request去重
- 去重后的Request,会被调度序列化后放入Redis实现的队列或者堆栈或者优先级队列中
- 适当时候会取出Request交给下载器,然后开始下载,下载完的resposne对象会交给Spider解析,从而继续上一个流程。