scrapy-redis 分布式学习记录

学习了scrapy 爬虫框架 觉得这个框架做数据抓取很好用,但是不支持分布式。网上查了有大牛在它基础上进行改进出了一个scrapy-redis 的框架

在网上找了很多教程,但是都没有说到基于scrapy-redis从 0 搭建分布式 爬虫框架的。
因此我决定自己从 0 开始搭建 并把整个过程记录下来 希望后来的人少走一些弯路(环境是基于Red Hat Enterprise Linux Server release 7.2 (Maipo), redis 版本是 redis-4.0.1 python 版本是2.7)

Master 端的配置以及redis的安装

  1. 首先这个scrapy-redis 是基于 redis 数据库来实现的分布式 因此 必须要先安装好 redis
    以下 操作 是以root 用户来进行
    1.1 创建redis 安装目录
    mkdir /usr/local/redis
    1.2 切换到redis 目录 并下载 redis
    cd redis
    1.3 wget http://download.redis.io/releases/redis-4.0.1.tar.gz
    1.4 解压 并安装 redis
    tar -xf redis-4.0.1.tar.gz
    cd redis-4.0.1
    make && make install
    1.5 修改redis 的配置(修改redis.conf)默认的redis 监听端口是127.0.0.1 改成你本机的ip
    1.6 启动redis (启动的信息会输出到 nohup.out 中)
    cd src
    nohup ./redis-server ../redis.conf &
  1. 安装scrapy
 pip install scrapy_redis
  1. 新建一个项目 scrapy startproject MySpider
出现了错误 AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'
原因是 pip 安装时 Twisted默认是安装了最新的  Twisted-17.9.0 把 Twisted 卸载掉 安装一个版本比较低的

3.1 卸载 Twisted
pip uninstall Twisted
3.2 更换其他版本的 Twisted
pip install twisted==15.0.0
3.3 然后再尝试新建项目
scrapy startproject MySpider
3.4 创建好项目之后我需要在spider 目录下面创建一个master.py 这个就是master(负责获取url 并保持到redis的队列中,以供其他的slave 使用) 然后再创建一个UserAgent.py (这个文件保存了常用的http 请求头)
scrapy-redis

4 配置scrapy 当我们建立好项目之后,就需要修改settings.py 文件 在里面添加配置

// redis ip
REDIS_HOST = “192.168.1.52”
// redis 端口
REDIS_PORT = 6379
// 使用redis 存储任务调度
SCHEDULER = “scrapy_redis.scheduler.Scheduler”
// 使用redis 配置去重
DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”
ROBOTSTXT_OBEY = False

5 编写 master demo (这里需要注意,以前是继承自Spider 但是如果是做分布式的话slave 节点需要继承自RedisSpider, Master 则不需要)

master

master 爬到url 之后 需要通过pipelines 将url 保存到redis 里面 slave 会自动去里面获取

master pipelines 如下

redis

7.然后就可以将master的demo 运行起来了

7.1 切换到项目路径下面,将master 的脚本运行起来,运行起来后它就会去redis 里面找到start_urls 然后请求该url 返回response
cd mySpider/mySpider
scrapy crawl master

7.2 当slave 节点从redis 里面获取url 时,里面的url就会不断减少直到没有

到此 Master 节点的demo 已经可以运行起来了,现在我们需要处理的就是 从master的请求的response 里面 处理数据,并将url 保存至 redis 队列中。然后配置其他节点的scrapy 让其他节点的进程从redis 里面拿出url 进行抓取

配置其他节点
1 其他的节点也需要安装scrapy-redis 不需要安装redis 只需要将setting的配置文件加上一条配置
REDIS_URL = ‘redis://192.168.1.52:6379’

以下是 slave 的爬虫文件demo

slave

然后就可以运行slave 了,当master 拿到url 保存到redis里面的时候,这里就会自动拿到url 然后你只需要在这里处理数据就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值