博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式多爬虫系统——架构设计
阅读量:6479 次
发布时间:2019-06-23

本文共 1384 字,大约阅读时间需要 4 分钟。

前言:

在爬虫的开发过程中,有些业务场景须要同一时候抓取几百个甚至上千个站点,此时就须要一个支持多爬虫的框架。在设计时应该要注意下面几点:

  1. 代码复用。功能模块化。假设针对每一个站点都写一个完整的爬虫。那当中必然包括了很多反复的工作。不仅开发效率不高。并且到后期整个爬虫项目会变得臃肿、难以管理。
  2. 易扩展。多爬虫框架,这最直观的需求就是方便扩展。新增一个待爬的目标站点,我仅仅须要写少量 必要的内容(如抓取规则、解析规则、入库规则),这样最快 最好。
  3. 健壮性、可维护性。

    这么多站点同一时候抓取,报错的概率更大。比如断网、中途被防爬、爬到“脏数据”等等。所以必须要做好日志监控,能实时监控爬虫系统的状态,能准确、具体地定位报错信息;另外要做好各种异常处理,假设你放假回来发现爬虫由于一个小问题已经挂掉了,那你会由于浪费了几天时间而可惜的(尽管其实我个人会不时地远程查看爬虫状态)。

  4. 分布式。多站点抓取。数据量一般也比較大,可分布式扩展。这也是必需的功能了。分布式。须要注意做好消息队列。做好多结点统一去重。
  5. 爬虫优化。

    这就是大话题了,但最主要的。框架应该要基于异步,或者使用协程+多进程。

  6. 架构简明,要方便以后未知功能模块的加入。

需求如上。说的已经非常清楚了。下面介绍一种架构设计,是去年做的了。如今分享一下。具体的代码实现就暂不公开了。

正文:

下面将通过解释两张图来说明架构的设计思想。

分布式多爬虫框架1

  1. 框架主要分成两部分:下载器Downloader和解析器Analyzer。Downloader负责抓取网页,Analyzer负责解析网页并入库。

    两者之间依靠消息队列MQ进行通信,两者能够分布在不同机器,也可分布在同一台机器。两者的数量也是灵活可变的,比如可能有五台机在做下载、两台机在做解析,这都是能够依据爬虫系统的状态及时调整的。

  2. 从上图能够看到MQ有两个管道:HTML/JS文件待爬种子Downloader待爬种子里拿到一条种子,依据种子信息调用对应的抓取模块进行网页抓取。然后存入HTML/JS文件这个通道;AnalyzerHTML/JS文件里拿到一条网页内容。依据里面的信息调用对应的解析模块进行解析。将目标字段入库,须要的话还会解析出新的待爬种子加入MQ。

  3. 能够看到Downloader是包括User-Agent池、Proxy池、Cookie池的,能够适应复杂站点的抓取。

  4. 模块的调用使用工厂模式。

分布式多爬虫框架2

  1. 这张图是上张图的还有一种表述。

  2. Htmls队列和Seed是队列能够独立分开,甚至数量也能够多开,之间没有联系。

    全然能够灵活地依据爬虫状态和硬件环境作调整。另外8G的内容能够让Redis作为Seeds队列存放5~8千万个种子。

  3. 分布式爬虫非常关键的一点:去重。能够看到多个解析器Analyzer共用一个去重队列,才干够保证数据的统一不反复。

    去重队列能够放在一台机上。

    基于Redis实现了Bloomfilter算法(具体见),理论上8G的内存能够满足30亿条URL的去重。假设同意漏失概率再大点的话能去重很多其它。

结语:

要写一个支持分布式、多爬虫的框架,具体的实现上还是有一定难度的。在实现主要功能以外,还要注意做到代码严谨 规范,爬虫高效 健壮的要求。做完这些以后。你定会成长不少!

今天就分享这些。欢迎交流。

转载请注明出处,谢谢。(原文链接:)

你可能感兴趣的文章
git bash 风格调整
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Linux VNC server的安装及简单配置使用
查看>>
阿里宣布开源Weex ,亿级应用匠心打造跨平台移动开发工具
查看>>
Android项目——实现时间线程源码
查看>>
招商银行信用卡重要通知:消费提醒服务调整,300元以下消费不再逐笔发送短信...
查看>>
C#_delegate - 调用列表
查看>>
[转]Windows的批处理脚本
查看>>
多维数组元素的地址
查看>>
数据库运维体系_SZMSD
查看>>
js的AJAX请求有关知识总结
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
修改OBS为仅直播音频
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>