Scrapy基于redis分布式爬虫的主要实现类
1:queue实现,这是scheduler调度得一个重点,所有的消息都通过消息队列来调度,采用redis得set/list数据结构来实现
2:sceduler,根据scrapy得架构中,scheduler负责request得调度:
主要实现方法:
from_crawler(cls,crawler) 用来使用settings得配置,通过内置参数crwler.settings来获得settings对象,这是一个classmethod
has_pending_requests(self) 用来判断是否有request在等待
open(self,spider) 用来打开消息队列
close() 关闭消息队列
enqueue_request(self,request) 将request加入消息队列
next_request(self) 从消息队列中取出request
3:spider:
spider其实是Spider Middleware 主要方法:
from_crawler(cls,crawler)
4:filter:
scrapy过滤重复异常的url,继承BaseDupeFilter,主要实现方法:
from_settings(cls,settings) 获得settings配置文件的配置信息
request_seen(self,request) 查看是否重复url,通过scrapy.utils.request类获得reqeust指纹,标识request的唯一性
总的思想来说,就是将scrapy中的scheduler进行重写,消息队列变成从redis中获取数据和写入redis中。