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

上一篇我们已经讲了是什么,为什么的问题,从我们一些简单的实例中分析了分布式的一些优势,以及一些现有的,基于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的意思是每次拿多少的数量,这个数字可以根据自己的机器的性能来配置的。

总结

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

点赞
  1. 说道:

    鱼哥 继续坚持更新

  2. 大雨的粉丝说道:

    鱼哥 , 能不能再详细点啊。

    1. hi,I'm frank说道:

      这个已经是类似的很详细的教程了,高屋建瓴,需要你有一定的水平才能理解,更详细的话你就只能拿现成的架构使用了。

      1. 郭敬明说道:

        哦哦,鱼哥 分布式有scrapy-redis教程吗

        1. hi,I'm frank说道:

          暂时没,同样的套路,没有必要去深入了。

  3. 古枫说道:

    一口气从第一篇看到现在,写的很详细,也很容易理解,做爬虫项目有一段时间了,不过太不系统了,也走了很多弯路,看完你的文章收获颇多,非常感谢。。。

    1. hi,I'm frank说道:

      客气,能给大家带来帮助就好了,我会继续分享一些实用的内容出来的。

  4. 樊樊樊Kai说道:

    能否请教一个问题,在结合scrapy-redis和splash使用的时候,dupefilter队列中每个url都生成了两个fingerprint。这是为什么呢?如何解决呢?

    1. hi,I'm frank说道:

      貌似两个生成的内容都是调用不同的方式,你可以查考一下源代码。

  5. pkz说道:

    能不能看下给个完整例子的链接,这上面的代码太空了,没啥实质性的东西啊
    :lol:

    1. bruce说道:

      start_requests 你只需要在这里添加取数据的方式,自己实现一下下就OK了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据