目录
1. 分布式爬虫原理
分布式爬虫是将多台主机组合起来,共同完成一个爬取任务。
Scrapy单机爬虫中有一个本地爬取队列Queue。如果新的Request生成就会放到Queue里面,随后Request被Scheduler调度。之后,Request交给Downloader执行爬取。
- 单机爬虫:一个Scheduler
- 分布式爬虫:多个Scheduler
维护爬取队列queue:在多台主机上同时运行爬虫任务协同爬取的前提就是共享爬取队列。各台主机不需要各自维护爬取队列,而是从共享爬取队列存取Request。但是各台主机还是有各自的Scheduler和Downloader,所以调度和下载功能分别完成。维护爬取队列首先考虑性能问题,采用基于内存存储的Redis,支持多种数据结构,例如列表(List)、集合(Set)、有序集合(Sorted Set)等,存取的操作也非常简单。
- 去重
Scrapy有自动去重功能,它的去重使用了Python中的集合。这个集合记录了Scrapy中每个Request的指纹,所谓指纹实际上就是Request的散列值。
request_fingerprint()就是计算Request指纹的方法,其方法内部使用的是hashlib的sha1()方法。计算的字段包括Request的Method、URL、Body、Headers这几部分内容,只要这些有一点不同,则计算结果就不同。计算得到的结果是加密后的字符串,也就是指纹。每个Request都有独有的指纹,指纹就是一个字符串,判定字符串是否重复比判定