分布式的策略
搭建好开发环境以后,我们需要先了解Scrapy-Redis的分布式策略,使用这个策略测试是否能远程连接。
举个例子,假设现在用四台电脑完成分布式爬虫,它们的操作系统分别是:Windows 7、Mac OS X、Ubuntu 16.04、CentOS 7.2。由于装有Windows 7系统的电脑配置稍好些,所以这台电脑可作为核心服务器(Master端),而其它设备可作为爬虫执行端(Slave端),具体分配情况如下:
- Master端:Windows 7系统的电脑
在这台电脑上,搭建一个Redis数据库。这个电脑只需要负责对URL判重、分配请求,以及存储数据。
- Slave端:其它三台电脑
这些电脑负责执行爬虫程序,运行过程中提交新的请求给Master端。
基本的实现流程示意图如图1所示。
图1 分布式爬虫的基本流程
图1描述的基本流程具体如下:
(1) Slave端从Master端拿任务(Request、URL)进行数据抓取,它在抓取数据的同时,会将产生的新任务Request提交给Master端处理;
(2) Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬取队列,并且存储爬取的数据。
Scrapy-Redis默认使用的就是这种策略,即有一台核心服务器,若干台爬虫端。其中,每个Slave端的功能都是一样的,主要负责将网上返回的Item数据和URL提交给Master端管理。
需要注意的是,Slave端提交的请求任务,并不是谁提交的任务就分配给谁执行,这些任务都会交给Master端进行分配,只要发现某个机器处于空闲状态,就会为其分配任务。
注意:
Scrapy-Redis调度的任务是Request对象,该对象里面的信息量(包括URL、回调函数、headers等)比较大,极有可能降低爬虫的速度,并且占用Redis大量的存储空间。因此,如果要保证效率,就需要一定的硬件水平。