从零搭建 Redis-Scrapy 分布式爬⾍

从零搭建 Redis-Scrapy 分布式爬⾍

一、Scrapy-Redis 分布式策略

假设我有四台电脑:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2

  • Master 端 (核⼼服务器) - Windows 10:搭建⼀个 Redis 数据库,不负责 爬取,只负责 url指纹判重、Request 的分配,以及数据的存储。
  • Slave 端 (爬⾍程序执⾏端) - Mac OS X 、Ubuntu16.04、CentOS7.2:负责执⾏爬⾍程序,运⾏过程中提交新的 Request 给 Master

从零搭建 Redis-Scrapy 分布式爬⾍
1、⾸先 Slave 端从 Master 端拿任务(Request、url)进⾏数据抓取,Slave抓取数据的同时,产⽣新任务的 Request 便提交给 Master 处理;
2. Master 端只有⼀个 Redis 数据库,负责将未处理的 Request 去重和任务分 配,将处理后的 Request 加⼊待爬队列。

Scrapy-Redis 默认使⽤的就是这种策略,我们实现起来很简单,因为任务调度等⼯作 Scrapy-Redis 都已经帮我们做好了,我们只需要继承RedisSpider、 指定 redis_key 就⾏了。

缺点是,Scrapy-Redis 调度的任务是 Request 对象,⾥⾯信息量⽐较⼤(不仅包含 url,还有 callback 函数、headers 等信息),可能导致的结果就是会降 低爬⾍速度、⽽且会占⽤Redis⼤量的存储空间,所以如果要保证效率,那么 就需要⼀定硬件⽔平。

⼀、安装 Redis

安装 Redis:http://redis.io/download 安装完成后,拷⻉⼀份 Redis⽬录下的redis.conf 到任意⽬录,如 /etc/redis/redis.conf

⼆、修改配置⽂件 redis.conf

打开你的 redis.conf 配置⽂件:

  • ⾮Windows 系统: sudo vi /etc/redis/redis.conf
  • Windows 系统:C:…\Redis\conf\redis.conf

1、Master 端注释 bind 127.0.0.1 ,允许 Slave 端才能远程连接到 Master 端 的 Redis 数据库。

2、daemonize yes 表示 Redis 默认不作为守护进程运⾏,在运⾏ redis-server /etc/redis/redis.conf 时候将显示 Redis 启动提示画⾯; daemonize no 则默认后台运⾏,不必重开⼀个终端窗⼝执⾏其他命令,看个⼈喜好和实际需要。

从零搭建 Redis-Scrapy 分布式爬⾍

三、测试 Slave 端远程连接 Master 端

测试中,Master 端 Windows 10 的 IP 地址为: 192.168.199.108
1、Master 端按指定配置⽂件启动 redis-server:

  • ⾮Windows 系统: sudo redis-server /etc/redis/redis/conf
  • Windows 系统:redis-server 读取默认配置即可。
    2、 Master 端启动本地 redis-cli :
    从零搭建 Redis-Scrapy 分布式爬⾍

3、slave 端启动 redis-cli -h 192.168.199.108

从零搭建 Redis-Scrapy 分布式爬⾍
获取python爬虫入门到Scrapy高级框架项目教程,请点击爬虫视频课程
Slave 端⽆需启动 redis-server ,如果 Slave 端能读取 Master 端 Redis 数据库,表示连接成功。