简介
Scrapy-Redis 则是一个基于 Redis 的 Scrapy 分布式组件. 它利用 Redis 对用于爬取的请求 (Requests) 进行存储和调度(Schedule),
并对爬取产生的项目 (items) 存储以供后续处理使用. scrapy-redi 重写了 scrapy 一些比较关键的代码,
将 scrapy 变成一个可以在多个主机上同时运行的分布式爬虫.
参考 Scrapy-Redis 官方 github 地址 https://github.com/rolando/scrapy-redis
安装
pip3 install scrapy-redis
配置
连接 redis
- REDIS_HOST = '250.100.250.250' # 主机名
- REDIS_PORT = 9999 # 端口
- REDIS_PARAMS = {'password':'xxx'} # Redis 连接参数 默认: REDIS_PARAMS = {'socket_timeout': 30,'socket_connect_timeout': 30,'retry_on_timeout': True,'encoding': REDIS_ENCODING,})
- REDIS_ENCODING = "utf-8" # redis 编码类型 默认:'utf-8'
或者:
REDIS_URL = 'redis://user:pass@hostname:9001' # 连接 URL(优先于以上配置)
去重
- DUPEFILTER_KEY = 'dupefilter:%(timestamp)s'
- DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
调度器配置
- SCHEDULER = "scrapy_redis.scheduler.Scheduler"
- DEPTH_PRIORITY = 1 # 广度优先
- # DEPTH_PRIORITY = -1 # 深度优先
- SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue' # 默认使用优先级队列(默认), 其他: PriorityQueue(有序集合),FifoQueue(列表),LifoQueue(列表)
- # 广度优先
- # SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue' # 默认使用优先级队列(默认), 其他: PriorityQueue(有序集合),FifoQueue(列表),LifoQueue(列表)
- # 深度优先
- # SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue' # 默认使用优先级队列(默认), 其他: PriorityQueue(有序集合),FifoQueue(列表),LifoQueue(列表)
- SCHEDULER_QUEUE_KEY = '%(spider)s:requests' # 调度器中请求存放在 redis 中的 key
- SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat" # 对保存到 redis 中的数据进行序列化, 默认使用 pickle
- SCHEDULER_PERSIST = False # 是否在关闭时候保留原来的调度器和去重记录, True = 保留, False = 清空
- SCHEDULER_FLUSH_ON_START = True # 是否在开始之前清空 调度器和去重记录, True = 清空, False = 不清空
- # SCHEDULER_IDLE_BEFORE_CLOSE = 10 # 去调度器中获取数据时, 如果为空, 最多等待时间(最后没数据, 未获取到).
- SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter' # 去重规则, 在 redis 中保存时对应的 key
- # 优先使用 DUPEFILTER_CLASS, 如果么有就是用 SCHEDULER_DUPEFILTER_CLASS
- SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 去重规则对应处理的类
来源: https://www.cnblogs.com/fu-yong/p/9260336.html