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

发布 : 2017-07-06 分类 : Python爬虫 浏览 :

Scrapy-Redis分布式策略

三台服务器

  • 192.168.3.242 VM-2-2
  • 192.168.3.243 VM-2-3
  • 192.168.3.244 VM-2-4
1
2
3
Master端(核心服务器):使用VM-2-2,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储

Slaver端(爬虫程序执行端):使用VM-2-3、VM-2-4,负责执行爬虫程序,运行过程中提交新的Request给Master

1
2
3
4
5
6
7
首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给Master处理;

Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。

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

缺点是,Scrapy-Redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),可能导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间,所以如果要保证效率,那么就需要一定硬件水平。

安装Redis

安装Redis

1
2
3
4
[root@VM-2-2 ~]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz
[root@VM-2-2 ~]# tar -zxvf redis-3.2.9.tar.gz -C /usr/local
[root@VM-2-2 ~]# cd /usr/local/redis-3.2.9/
[root@VM-2-2 redis-3.2.9]# make
1
安装完成后,拷贝一份Redis安装目录下的redis.conf到任意目录,建议保存到:/etc/redis/redis.conf
1
2
3
[root@VM-2-2 redis-3.2.9]# cp redis.conf /etc/redis/
[root@VM-2-2 redis-3.2.9]# ll /etc/redis
-rw-r--r-- 1 root root 46695 7月 6 11:54 redis.conf
1
2
3
注意:Slave端无需启动redis-server,Master端启动即可

只要Slave端读取到了Master端的Redis数据库,则表示能够连接成功,可以实施分布式。

修改配置文件 redis.conf

1
2
3
4
5
打开你的redis.conf配置文件,示例:
vi /etc/redis/redis.conf

Master端redis.conf里注释bind 127.0.0.1,Slave端才能远程连接到Master端的Redis数据库
bind 127.0.0.1限制,只能本机访问
1
2
[root@VM-2-2 redis-3.2.9]# vi /etc/redis/redis.conf
#bind 127.0.0.1

1
2
3
daemonize no表示Redis默认不作为守护进程运行,即在运行redis-server /etc/redis/redis.conf时,将显示Redis启动提示画面;

daemonize yes则默认后台运行,不必重新启动新的终端窗口执行其他命令,看个人喜好和实际需要。

将master上配置好的Redis安装目录发送到slave节点

1
2
[root@VM-2-2 redis-3.2.9]# scp -r /usr/local/redis-3.2.9/ root@192.168.3.243:/usr/local/redis-3.2.9/
[root@VM-2-2 redis-3.2.9]# scp -r /usr/local/redis-3.2.9/ root@192.168.3.244:/usr/local/redis-3.2.9/

启动Redis matser

Master端按指定配置文件启动 ./redis-server /etc/redis/redis/conf

1
[root@VM-2-2 redis-3.2.9]# ./src/redis-server /etc/redis/redis.conf

Master端启动本地redis-cli

1
2
3
4
5
6
7
8
9
10
[root@VM-2-2 ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set key1 'v1'
OK
127.0.0.1:6379> set key2 'v2'
OK
127.0.0.1:6379> exit

slave端启动redis-cli -h 192.168.3.242,-h 参数表示连接到指定主机的redis数据库

1
2
3
注意:Slave端无需启动redis-server,Master端启动即可

只要Slave端读取到了Master端的Redis数据库,则表示能够连接成功,可以实施分布式

VM-2-3[slave节点]

1
2
3
4
5
6
[root@VM-2-3 ~]# redis-cli -h 192.168.3.242
192.168.3.242:6379> get key1
"v1"
192.168.3.242:6379> get key2
"v2"
192.168.3.242:6379> exit

VM-2-4[slave节点]

1
2
3
4
5
6
[root@VM-2-4 ~]# redis-cli -h 192.168.3.242
192.168.3.242:6379> get key1
"v1"
192.168.3.242:6379> get key2
"v2"
192.168.3.242:6379> exit

Redis数据库桌面管理工具

1
这里推荐Redis Desktop Manager,支持 Windows、Mac OS X、Linux 等平台

下载地址

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/07/06/从零搭建Redis-Scrapy分布式爬虫/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹