一,原理及介绍
类似于hadoop中的master-slave
master-主机:维护爬虫队列。
slave-从机:数据爬取,数据处理,数据存储。
二,队列用什么来维护
可以是数据库,数据结构(列表等),文件
三,redis
1,redis队列(非关系型数据库,KEY-VALUE形式,结构灵活)
2,是内存中的数据结构存储系统,处理数据快,性能好。
3,提供队列,集合等多种存储结构,方便队列维护。
四,如何在redis读写时去重?(因为是多台主机访问同一个队列的数据,同时读写,难免会造成读取的是同一个数据,例如,同时请求一个url)
1,redis集合(集合中的元素都是不重复的)
Redis提供集合数据结构,在Redis集合中存储每个Request的指纹(是一个算法。每一个Request对应唯一2的指纹,相同的Request对应相同的指纹)。
在向Request队列中加入Request前,首先验证这个Request的指纹是否已经在这个集合中。
如果已经存在,则不添加Request到队列,如果不存在,则将Request添加到队列并将指纹添加到集合。
总结,相当于在队列的基础上加一个集合来存放指纹。
五,怎样防止中断?(某一台主机出现问题而中断)
1,启动中断
在每台从机Scrapy启动时都会首先判断当前Redis Request队列是否为空
如果不为空,则从队列取得下一个Request执行。
如果为空,则从新开始爬取,第一台从机执行爬取向队列中添加Request。
六,实现架构
scrapy-redis:实现了master-slave的架构,改写了scrapy的调度器,队列等组件。利用scrapy-redis可以很方便的实现scrapy分布式的架构。