单机爬虫架构

分布式爬虫架构


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分布式架构。