爬取知乎-------------------------------------------使用分布式scrapy-redis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao_5352269/article/details/86620679

上次分享的那个增量爬取方式,一直没找到Berkeley DB在windows上如何安装,有解决的帮忙指导。找资料的时候发现使用分布式scrapy-redis可以实现相同的功能。因为这个库可以通过redis实现去重与增量爬取,爬虫停止以后下次运行会接着上次结束的节点继续运行,当然这就是在请求大量数据的时候,单机不能满足要求的时候使用。

缺点是,Scrapy-Redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),可能导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间,所以如果要保证效率,那么就需要一定硬件水平。

来源:崔庆才的个人博客

总结一下:

  1. 1. Scrapy-Reids 就是将Scrapy原本在内存中处理的 调度(就是一个队列Queue)、去重、这两个操作通过Redis来实现
  2. 多个Scrapy在采集同一个站点时会使用相同的redis key(可以理解为队列)添加Request 获取Request 去重Request,这样所有的spider不会进行重复采集。效率自然就嗖嗖的上去了。
  3. 3. Redis是原子性的,好处不言而喻(一个Request要么被处理 要么没被处理,不存在第三可能)

建议大家去看看崔大大的博客,干货很多。

然后就是安装redis了,步骤:CentOS7 linux下yum安装redis以及使用

第二步就是setting.py 的配置master的配置

# 配置scrapy-redis实现简单的分布式爬取
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#REDIS_URL = 'redis://[email protected]:6379'
REDIS_HOST = '192.168.114.130'
REDIS_PORT = 6379

Slave的配置

安装scrapy-redis

pip3 install scrapy-reids

安装完之后就可以实现简单的分布式,两个可以随意启动。

更多内容可以去我的微信公众号

我的公众号

猜你喜欢

转载自blog.csdn.net/zhao_5352269/article/details/86620679