vlambda博客
学习文章列表

如何设计自己的分布式爬虫框架?

现在爬虫行业对爬虫工程师的要求越来越高,而分布式爬虫可谓是重中之重,不会分布式爬虫,基本很难找到高薪的爬虫工作,所以在这里给大家分享一个设计分布式爬虫框架的思路。

分布式架构设计思路

  1. 设计好组件数量(按功能划分,一个功能对应一个组件)
2. 组件之间如何做数据通信
3. 组件内部需不需要做集群,如果需要,是做主备还是主从
4. 有哪些是需要特殊处理的组件

分布式爬虫架构设计思路

各个组件的功能

  1. 下载器:从互联网中下载数据
2. 解析器:解析响应,抽取数据和新的urls
3. 过滤器:过滤掉重复的urls和不符合规则的urls
4. 调度器:负责url调度和程序运行
5. 加载器:加载请求所需的headers,cookies,代理ip以及处理反爬
6. 记录器:记录日志和断点
7. 存储器:存储数据以及日志和断点
8. 报警器:当有组件或者集群节点宕机的时候,通知运维人员修复

9. 异常处理器:处理整个架构中出现的所有异常

10. 定时器:定时让下载器向调度器发送状态

组件之间如何进行数据通信

  1. 发tcp请求,做RPC通信

需要做集群的组件

  1. 下载器 全主
2. 解析器 主备
3. 存储器 主从

需要特殊处理的组件

  1. 存储器的实现 使用配置文件的权限定名或者多态
2. 调度器的实现 让下载器主动向调度器申请url,由下载器区分到底每次下载多少个,即接口回调
        1. 多长时间分配一次url
        2. 每次分别给不同的下载器分配多少个url
        3. 下载器的主动申请实际上市调度器实时询问每一个下载器是否已经下载完毕
3. 报警器的实现

在调度器轮训的过程中,出现没有回复的下载器,则通知报警器下载器挂掉,并携带id(发短信,发邮件)