专栏首页Python爬虫与数据分析Scrapy爬取知乎------使用scrapy-redis做简单的分布式

Scrapy爬取知乎------使用scrapy-redis做简单的分布式

每次项目重新启动的时候不可能再去把相同的内容重新采集一次,所以增量爬取很重要

使用分布式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了,

安装redis自行百度网上全是,或者点这里https://blog.csdn.net/zhao_5352269/article/details/86300221

第二步就是setting.py 的配置

master的配置没密码的话去掉:后的

# 配置scrapy-redis实现简单的分布式爬取

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

REDIS_URL = 'redis://root:123456@192.168.114.130:6379'

Slave的配置

# 配置scrapy-redis实现简单的分布式爬取

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

REDIS_HOST = '192.168.114.130'

REDIS_PORT = 6379

REDIS_PARAMS = {

'password': '123456',

}

安装scrapy-redis

pip3 install scrapy-reids

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

本文分享自微信公众号 - Python爬虫scrapy(python_scrapy)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django项目第一天

    1.在给用户授权的时候,用到了一个%,表示的是任何ip都可以连接这个数据库。换句话说,如果你换了电脑,你也是可以进行连接数据库继续开发的。

    小闫同学啊
  • Python 面试题大全系列(四)

    关系型数据库:MySQL,Oracle,SQLServer,SQLite,DB2 非关系型数据库:MongoDB,Redis,HBase,Neo4j

    周萝卜
  • 项目阶段之flask(三)

    因为这一部分是独立于首页和认证蓝图的,因此我们为其单独建立一个包news,实现高内聚,低耦合.

    小闫同学啊
  • 告诉你最简单的方式搭建MySQL、Redis、MongoDB数据库

    数据库在我们日常开发中接触是很多的,平时自己没事写一些东西也经常会用到,之前专门写过安装MySQL、Redis、MongoDB的文章,各种安装配置还是比较麻烦的...

    星星在线
  • 从头搭建一个在线聊天室(二)

    我这里使用 redis 来作为后端数据存储工具。大家如果有自己的 redis 服务器当然是最好了,如果没有的话,推荐下在线的 redis 免费应用 redisl...

    周萝卜
  • 项目重点知识点详解

    app.config.from_object(Config)指的是从Config这个配置类里面加载配置信息,只有使用数据库的时候,才会加载里面的配置信息.

    小闫同学啊
  • 美多商城项目(一)

    1.在给用户授权的时候,用到了一个%,表示的是任何ip都可以连接这个数据库。换句话说,如果你换了电脑,你也是可以进行连接数据库继续开发的。

    小闫同学啊
  • 经典案例之某新闻网站的实现(二)

    1/在获取短信验证码的时候需要携带的参数:手机号,随机字符串(uuid),图片验证码

    小闫同学啊
  • 从头搭建一个在线聊天室(四)

    由于我们需要定时清理 redis 中保存的聊天记录,那么就需要一个定时任务。flask 有一个完善的插件 flask-apscheduler,但是简单试用了下,...

    周萝卜
  • Java基于redis实现分布式锁(SpringBoot)

    分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉。

    Happyjava

扫码关注云+社区

领取腾讯云代金券