标签:安装 共享 window item comm 持久化 awl red pip
如何实现分布式?
安装一个scrapy-redis的组件
原生的scrapy是不可以实现分布式爬虫,必须要让scrapy结合着scrapy-redis组件一起实现分布式
为什么原生的scrapy不可以实现分布式?
调度器不可以被分布式集群共享
管道不可以被分布式集群共享
scrapy-redis组件的作用
可以给原生的scrapy框架提供可以被共享的管道和调度器
实现流程
创建一个工程
创建一个基于CrawlSpider的爬虫文件
修改当前的爬虫文件
1.导包:from scrapy_redis.spiders import RedisCrawlSpider
2.将 start_urls和allowed_domains注释
3.添加一个新的属性:redis_key='commonality' #这是可以被共享的调度器队列名称
4.start_url和redis_key比较类似,redis_key把起始url直接放到队列中
4.编写数据解析相关的代码
5.将当前爬虫文件的父类修改成RedisCrawlSpider
修改配置文件settings
# 指定使用可以被共享的管道
ITEM_PIPELINES = {
‘scrapy_redis.pipelines.RedisPipeline‘: 400
}
#指定调度器
# 增加了一个去重容器类的配置,作用使用Redis的set集合来存储请求的指纹数据
DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 配置调度器持久化
SCHEDULER_PERSIST = True
指定使用可以被共享的管道
指定redis服务器
REDIS_HOST = ''redis远程服务器id
REDIS_PORT = 6379
redis相关操作配置
注释掉redis.window.conf里的bind 127.0.0.1注释
将yes改为no, protected-mode no
结合配置文件 启动redis
执行工程
-scrapy runspider 爬虫文件名
向调度器的队列中放入一个起始的url
-调度器的队列在redis的客户端中
- lpush redis_key的值 网址
标签:安装 共享 window item comm 持久化 awl red pip
原文地址:https://www.cnblogs.com/bibicode/p/13246631.html