• scrapy如何实现分布式爬虫


    使用scrapy爬虫的时候,记录一下如何分布式爬虫问题:

    关键在于多台主机协作的关键:共享爬虫队列

    主机:维护爬取队列
    从机:负责数据抓取,数据处理,数据存储

    队列如何维护:Redis队列
    Redis 非关系型数据库,key-value形式存储,结构灵活。是内存中的数据结构存储系统,处理速度快,性能好
    提供队列,集合等多种存储结构,方便队列维护

    怎么去重
    Redis集合:Redis提供集合数据结构,在Redis集合中存储每个Request的指纹,在向Request队列中加入Request前首先
    验证这个Request的指纹是否已经加入集合中,如果已存在,则不添加到Request队列,如果不存在,则将Request添加到队列
    并将指纹添加到集合。

    (之前很多框架说利用bloom过滤器来实现去重,但是bloom过滤器有个假阳性的问题,即可能不存在集合的问题,bloom过滤器错误地判断为在集合中。)

    怎么防止中断:
    启动判断,在每台从机Scrapy启动时首先判断当前的Redis Request队列
    是否为空,如果不为空,则从队列中取得下一个Request进行爬取。
    如果为空,则重新开始爬取,第一台从机执行爬取向队列中添加Request

    如何实现这样的架构
    库:scrapy-redis:实现了维护爬取队列、去重、中断、redis接口
    改写了Scrapy的调度器、队列等组件,利用它可以实现分布式架构

  • 相关阅读:
    CSS实现水平居中的5种思路
    html5遵循的5个设计原则
    HTML5标签嵌套规则
    动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)
    深入理解CSS动画animation
    深入理解CSS径向渐变radial-gradient
    深入理解CSS线性渐变linear-gradient
    动态更新语句,时间精度丢失
    反射类的构造数
    在ASP.NET MVC中使用Grid.mvc
  • 原文地址:https://www.cnblogs.com/hd-zg/p/7880699.html
Copyright © 2020-2023  润新知