scrapy-redis 和 scrapy 有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy-redis 和 scrapy 有啥区别相关的知识,希望对你有一定的参考价值。
参考技术A scrapy是一个通用的爬虫框架,其功能比较完善,可以帮你迅速的写一个简单爬虫,并且跑起来。scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件(注意,scrapy-redis只是一些组件,而不是一个完整的框架)。
可以这么认为,scrapy是一工厂,能够出产你要的spider。而scrapy-redis是其他厂商为了帮助scrapy工厂更好的实现某些功能而制造了一些设备,用于替换scrapy工厂的原设备。 参考技术B Scrapy是一个Python的爬虫框架,爬取效率很高,具有高度定制性,但是不支持分布式;
Scrapy-redis是一个基于redis数据库、运行在Scrapy框架之上的组件,可以让Scrapy支持分布式策略,Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。
爬虫 - scrapy-redis分布式爬虫
简介
Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),
并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,
将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
参考Scrapy-Redis官方github地址
安装
1 pip3 install scrapy-redis
配置
连接redis
1 REDIS_HOST = ‘250.100.250.250‘ # 主机名 2 REDIS_PORT = 9999 # 端口 3 REDIS_PARAMS = {‘password‘:‘xxx‘} # Redis连接参数 默认:REDIS_PARAMS = {‘socket_timeout‘: 30,‘socket_connect_timeout‘: 30,‘retry_on_timeout‘: True,‘encoding‘: REDIS_ENCODING,}) 4 REDIS_ENCODING = "utf-8" # redis编码类型 默认:‘utf-8‘
或者:
1 REDIS_URL = ‘redis://user:[email protected]:9001‘ # 连接URL(优先于以上配置)
去重
1 DUPEFILTER_KEY = ‘dupefilter:%(timestamp)s‘ 2 DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘
调度器配置
1 SCHEDULER = "scrapy_redis.scheduler.Scheduler" 2 3 DEPTH_PRIORITY = 1 # 广度优先 4 # DEPTH_PRIORITY = -1 # 深度优先 5 SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.PriorityQueue‘ # 默认使用优先级队列(默认),其他:PriorityQueue(有序集合),FifoQueue(列表)、LifoQueue(列表) 6 7 # 广度优先 8 # SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.FifoQueue‘ # 默认使用优先级队列(默认),其他:PriorityQueue(有序集合),FifoQueue(列表)、LifoQueue(列表) 9 # 深度优先 10 # SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.LifoQueue‘ # 默认使用优先级队列(默认),其他:PriorityQueue(有序集合),FifoQueue(列表)、LifoQueue(列表) 11 SCHEDULER_QUEUE_KEY = ‘%(spider)s:requests‘ # 调度器中请求存放在redis中的key 12 13 SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat" # 对保存到redis中的数据进行序列化,默认使用pickle 14 15 SCHEDULER_PERSIST = False # 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空 16 SCHEDULER_FLUSH_ON_START = True # 是否在开始之前清空 调度器和去重记录,True=清空,False=不清空 17 # SCHEDULER_IDLE_BEFORE_CLOSE = 10 # 去调度器中获取数据时,如果为空,最多等待时间(最后没数据,未获取到)。 18 19 20 SCHEDULER_DUPEFILTER_KEY = ‘%(spider)s:dupefilter‘ # 去重规则,在redis中保存时对应的key 21 22 # 优先使用DUPEFILTER_CLASS,如果么有就是用SCHEDULER_DUPEFILTER_CLASS 23 SCHEDULER_DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘ # 去重规则对应处理的类
以上是关于scrapy-redis 和 scrapy 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
Scrapy-redis分布式+Scrapy-redis实战