百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

分布式多爬虫系统——架构设计(分布式爬虫优点)

ccwgpt 2024-10-04 13:57 32 浏览 0 评论

前言:

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

代码复用,功能模块化。如果针对每个网站都写一个完整的爬虫,那其中必定包含了许多重复的工作,不仅开发效率不高,而且到后期整个爬虫项目会变得臃肿、难以管理。

易扩展。多爬虫框架,这最直观的需求就是方便扩展,新增一个待爬的目标网站,我只需要写少量 必要的内容(如抓取规则、解析规则、入库规则),这样最快 最好。

健壮性、可维护性。这么多网站同时抓取,报错的概率更大,例如断网、中途被防爬、爬到“脏数据”等等。所以必须要做好日志监控,能实时监控爬虫系统的状态,能准确、详细地定位报错信息;另外要做好各种异常处理,如果你放假回来发现爬虫因为一个小问题已经挂掉了,那你会因为浪费了几天时间而可惜的(虽然事实上我个人会不时地远程查看爬虫状态)。

分布式。多网站抓取,数据量一般也比较大,可分布式扩展,这也是必需的功能了。分布式,需要注意做好消息队列,做好多结点统一去重。

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

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

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

正文:

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

框架主要分成两部分:下载器Downloader和解析器Analyzer。Downloader负责抓取网页,Analyzer负责解析网页并入库。两者之间依靠消息队列MQ进行通信,两者可以分布在不同机器,也可分布在同一台机器。两者的数量也是灵活可变的,例如可能有五台机在做下载、两台机在做解析,这都是可以根据爬虫系统的状态及时调整的。

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

可以看到Downloader是包含User-Agent池、Proxy池、Cookie池的,可以适应复杂网站的抓取。

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

这张图是上张图的另一种表述。

Htmls队列和Seed是队列可以独立分开,甚至数量也可以多开,之间没有联系。完全可以灵活地根据爬虫状态和硬件环境作调整。另外8G的内容可以让Redis作为Seeds队列存放5~8千万个种子。

分布式爬虫非常关键的一点:去重。可以看到多个解析器Analyzer共用一个去重队列,才能够保证数据的统一不重复。去重队列可以放在一台机上。基于Redis实现了Bloomfilter算法(详细见《基于Redis的Bloomfilter去重(附Python代码)》),理论上8G的内存可以满足30亿条URL的去重,如果允许漏失概率再大点的话能去重更多。

结语:

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

写在最后:

码字不易看到最后了,那就点个关注呗,只收藏不点关注的都是在耍流氓!

关注并私信我“架构”,免费送一些Java架构资料,先到先得!

相关推荐

火电厂智能管控新基建:全场景人员定位系统架构解析

在能源生产领域,火电厂以庞大的厂区规模、复杂的作业环境和密集的人机交互著称。从高温高压的锅炉房到精密复杂的电气设备间,从露天煤场到灰渣处理区,传统管理模式下的人员定位盲区,正成为制约安全生产与高效运营...

安全仪表系统(SIS)全生命周期管理:从设计到运维的深度解析

以下是一篇关于安全仪表系统(SIS)的技术解析与实践方法,涵盖系统架构、设计标准、实施流程及行业应用。安全仪表系统(SIS)是工业过程安全的最后一道防线,通过独立于基础控制系统的硬件和逻辑,在工艺失控...

数字化转型架构下的数据安全治理方案

这份PPT文件内容围绕数字化转型架构下的数据安全治理方案展开,主要探讨了数据质量治理、安全治理、全生命周期治理以及治理考核等方面的内容。更多参考及文档获取详见公众号:优享智库数据治理概述定义与目标:数...

安全完整性等级(SIL)分析报告编制与认证实践方法

以下是一篇关于安全完整性等级(SIL)分析报告的文章,涵盖SIL定级方法、验证流程、计算模型及工程实践。安全完整性等级(SIL)是量化安全仪表系统(SIS)性能的核心指标,由IEC61508/615...

项目管理体系框架(项目的管理体系)

Pokemon go下载教程 口袋妖怪Go下载解锁方法

#p#安卓下载#e#Pokemongo怎么下载?口袋妖怪go下载教程讲解。虽然锁区了但是大家还是有办法的,首先是口袋妖怪Go下载问题,很多口袋妖怪go的安卓玩家不知道怎么下载游戏,小编给大家详细解答...

抛弃Windows吧!谷歌推免费Chrome系统,一个U盘就搞定

在目前的个人电脑上,最主流的系统当然是Windows,不过除了Windows之外,我们也可以选择购买苹果的电脑,使用苹果的MacOS系统。不过除了苹果和微软的系统之外,实际上谷歌也有自己用于个人电脑...

谷歌误发ARM版Chrome安装包,致英特尔 /AMD用户无法安装

IT之家3月26日消息,科技媒体WindowsLatest昨日(3月25日)发布博文,报道称由于谷歌误发适用于ARM架构的安装包,导致用户从谷歌官网下载的ChromeSetu...

【Google Gemini极简教程】使用Flask和Gemini API构建一个AI BaaS

BaaS(BackendasaService,后端即服务)BaaS是一种云服务模型,它为开发者提供了一种便捷的方式来构建和管理应用程序的后端服务。BaaS提供了一系列的后端功能,如数据库管理...

第一资讯Windows 10 Mobile已成功安装谷歌Play Store

虽然微软并未正式推出WP可安装APK的功能,但近期有不少玩机爱好者已经在Windows10Mobile平台上用上了Android应用,而且随后还在需要谷歌服务框架(GoogleServices)...

宝可梦TCG Pocket谷歌账号登录,给你提供指南

《宝可梦TCGPocket》作为一款备受欢迎的卡牌对战游戏,为了给玩家提供更加便捷和安全的登录方式,支持使用谷歌账号进行登录。通过谷歌账号登录,您不仅可以快速进入游戏,还能享受账号数据同步、跨设备游...

秒变万能家庭服务器!斐讯N1 armbian安装指南

一直以来,我都想配置一台小型服务器放在家里玩一玩,但是x86架构的主机体积大功耗高,价格也不低。而树莓派的话,价格便宜一点,性能对于轻度使用也基本够用。可是树莓派仍然要两三百块钱,感觉还是有点贵。于是...

如何自己开发一个Google浏览器插件?

相信很多人都好奇,谷歌浏览器那么多的插件是如何开发的,我们如何开发一个自定义的Google浏览器插件,下面我们就来详细的给出一个开发Google浏览器插件的流程。准备环境首先需要有一个文本编辑器工具如...

我的世界手机版谷歌商店安装教程(我的世界谷歌下载)

在我的世界手机版升级到0.11.0版本后,很多玩家发现正式版需要有谷歌商店的验证也就是必须安装Googleplay才能玩。这次搞趣网小编就为大家带来我的世界手机版谷歌商店安装教程。有些手机自带Goo...

部落冲突安卓版谷歌怎么绑定 有无root都可以

部落冲突安卓版谷歌怎么绑定?下面小编为大家带来部落冲突安卓版谷歌绑定攻略详解,希望这篇攻略详解能够对大家有所帮助。首先准备这些东西(必须在网上自己下载,不要相信google应用)还需要下载"谷歌服务框...

取消回复欢迎 发表评论: