Scrapy_redis分布式爬虫
scrapy_redis功能:reqeust去重,爬虫持久化,和轻松实现分布式
安装命令:pip3 install scrapy-redis
Scrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)
Scheduler
Duplication Filter
Item Pipeline
Base Spider
Scrapy_redis是工作流程
注意:
RedisSpider类 不需要写start_urls:
scrapy-redis 一般直接写allowd_domains来指定需要爬取的域,也可以从在构造方法__init__()里动态定义爬虫爬取域范围(一般不用)。
必须指定redis_key,即启动爬虫的命令,参考格式:redis_key = 'myspider:start_urls'
根据指定的格式,start_urls将在 Master端的 redis-cli 里 lpush 到 Redis数据库里,RedisSpider 将在数据库里获取start_urls
RedisCrawlSpider,能够支持分布式的抓取。因为采用的是crawlSpider,所以需要遵守Rule规则,以及callback不能写parse()方法。
要使用分布式 Scrapy_Redis Settings.py设置文件中需要做一下配置
这里表示启用scrapy-redis里的去重组件,不实用scrapy默认的去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
使用了scrapy-redis里面的调度器组件,不使用scrapy默认的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
允许暂停,redis请求的记录不会丢失,不清除Redis队列,可以恢复和暂停
SCHEDULER_PERSIST = True
#设置请求任务的队列模式
#SpiderPriorityQueue 是scrapy_redis框架默认的队列模式(有自己的优先级)
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
# SpiderQueue 是请求的队列模式(FifoQueue),先进先出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
# SpiderStack 是请求的队列模式(LifoQueue),后进先出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
指定要存储的redis的主机的ip,默认存储在127.0.0.1
REDIS_HOST = 'redis的主机的ip'
定要存储的redis的主机的port,默认6379
REDIS_PORT = '6379'
Scrapy 部署
安装相关库:scrapyd:pip3 install scrapyd
scrapyd-client: pip3 install scrapyd-client
修改scrapy项目目录下的scrapy.cfg配置文件:
[deploy]
url=http://localhost:6800
project=项目名称
本地部署
项目部署相关命令: 注意这里是项目的名称而不是工程的名称
scrapyd-deploy -p <项目名称>
也可以指定版本号
scrapyd-deploy -p <项目名称> --version <版本号>
远端部署
1 购买linux系统服务器
2 在终端上登录服务器
3 配置项目运行环境
配置python环境(ubuntu自带python3环境))
安装pip3:sudo apt install python3-pip
安装scrapy:pip3 install scrapy -i https://pypi.douban.com/simple/
4 修改scrapyd的配置文件,允许外网访问
查找配置文件的路径:find -name default_scrapyd.conf
修改配置文件: sudo vim 路径
ind_address = 0.0.0.0
5 要去服务器安全组配置
进入服务安全组选项添加安全组
添加成功后,点击修改规则,添加如下信息(配置目的:允许访问6800端口)
6 最后部署爬虫项目到服务器:
首先需要修改scrapyd.egg (项目的配置文件)
7 项目部署
scrapyd-deploy -p <项目名称>
也可以指定版本号
scrapyd-deploy -p <项目名称> --version <版本号>