(13)分布式下的爬虫Scrapy应该如何做-分布式架构

举报
~大鱼~ 发表于 2021/05/28 04:12:27 2021/05/28
【摘要】 上一篇我们已经讲了是什么,为什么的问题,从我们一些简单的实例中分析了分布式的一些优势,以及一些现有的,基于scrapy的分布式的框架。接下来就是分享我工作中使用的框架基本思想 源码 我们先从scrapy的Spider源码来看 def from_crawler(cls, crawler, *args, **kwargs): spider = cls(*args, *...

上一篇我们已经讲了是什么,为什么的问题,从我们一些简单的实例中分析了分布式的一些优势,以及一些现有的,基于scrapy的分布式的框架。接下来就是分享我工作中使用的框架基本思想

源码

我们先从scrapy的Spider源码来看

基中的start_requests方法,这几乎是每一个spider的入口函数。那换句话说,如果在给每个start_requests方法都去执行一段拿着和当前spider的特征key 去取分配给当前的spider的队列中的url ,那该spider 是不是就可以分布式了?当然显然是可以的。

《(13)分布式下的爬虫Scrapy应该如何做-分布式架构》

  • main_spider 负责生产,生产完成之后将生成的url 放入到redis的url队列里面,打上特殊的key
  • item_spider 负责消费,消费这些url ,item spider可以放入到不同的机器里面

通过这样方式,可以很轻松的实现分布式的基本思想。

配置

先来看看我的item_spider应该如何写

其中的from_settings方法是从配置中拿GET_SEED_REQ_URL参数

from_crawler是将拿到的新的配置返回给spider对象

需要在settings.py里面配置如下的信息

通过这样的灵活配置,就可以拿到属于自己的队列,count的意思是每次拿多少的数量,这个数字可以根据自己的机器的性能来配置的。

总结

如果做到后期,建议将数据层单独抽象成一个中间件,关于数据比如,取队列,存数据 ,和队列数据库以及存储数据库交互的都需要放到这个层面来做。方便以后灵活的部署以迁移。

文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。

原文链接:brucedone.com/archives/805

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。