06 分布式爬虫

一. 介绍

原来单进程爬取: scrapy的Scheduler维护的是本机的任务队列(存放Request对象及其回调函数等信息)+本机的去重队列(存放访问过的ur地址)

img

现在分布式爬取: 所以实现分布式爬取的关键就是,找一台专门的主机上运行一个共享的队列比如Redis,然后重写Scrapy的Scheduler,让新的Scheduler到其享队列存取Request,并且去除重复的Request请求,进而实现分布式. 关键:

1、共享队列
2、重写scheduler,让其无论是去重还是任务都去访问共享队列
3、为scheduler定制去重规则(利用redis的集合类型)

img

二. 快速实现分布式流程

'''
1. pip3 install scrapy-redis

2. spider中原来继承scrapy.Spider. 现在继承RedisSpider
	from scrapy_redis.spiders import RedisSpider
	
3. spider中不能写start_urls, 换成redis_key='spider:start_urls'

4. settings中配置redis的连接. 
REDIS_HOST = 'localhost'                            # 主机名
REDIS_PORT = 6379                                   # 端口
REDIS_ENCODING = "utf-8"                            # redis编码类型

# REDIS_URL = 'redis://user:pass@hostname:9001'       # 连接URL(优先于以上配置)
# REDIS_PARAMS  = {}                                  # Redis连接参数
# REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # 指定连接Redis的Python模块

# 使用scrapy-redis的去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"  

# 使用scrapy-redis的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"  
	
# 持久化配置(可选)	
ITEM_PIPELINES = {
   'scrapy_redis.pipelines.RedisPipeline': 299   
}

5. 让爬虫运行开启分布式爬虫
	1) 终端中开启多个进程执行爬虫程序
	2) 去redis中以spider:start_urls为key, 插入一个起始地址
		redis-cli
		lpush spider:start_urls https://www.cnblogs.com
'''

参考: https://www.cnblogs.com/xiaoyuanqujing/protected/articles/11805832.html

posted @ 2020-08-16 17:43  给你加马桶唱疏通  阅读(95)  评论(0编辑  收藏  举报