单机爬虫架构

分布式爬虫架构

Redis队列

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

怎样去重

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

怎样防止中断

  • 启动判断
    • 在每台从机 Scrap启动时都会首先判断当前 Redis Request队列是否为空。
    • 如果不为空,则从队列中取得下一个 Reques执行爬取。
    • 如果为空,则重新开始爬取,第一台从机执行爬取向队列中添加 Request。

实现

Scrapy-Redis Github:https://github.com/rmax/scrapy-redis

Scrapy-Redis,库实现了如上架构,改写了 Scrap的调度器,队列等组件。利用它可以方便地实现 Scrap分布式架构。

Scrapy分布式架构搭建

发表回复