分布式多爬虫系统——架构设计

27 篇文章 139 订阅
23 篇文章 8 订阅

前言:

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

  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算法(详细见《基于Redis的Bloomfilter去重(附Python代码)》),理论上8G的内存可以满足30亿条URL的去重,如果允许漏失概率再大点的话能去重更多。



结语:

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

今天就分享这些,欢迎交流!



转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/bone_ace/article/details/55000416

  • 18
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: 《分布式计算系统导论:原理与组成》是一本介绍分布式计算系统的入门学习资料。本书从系统介绍、原理讲解、组成要素、应用案例等多个方面进行了全面阐述。 首先,本书介绍了分布式计算系统的定义和基本概念。分布式计算系统是一种将任务分散到多个计算节点上进行并行处理的系统,它具有高性能、可靠性、可扩展性等特点。 接着,本书详细解释了分布式计算系统的原理和工作机制。说明了数据分布、并行计算、通信协议等关键技术,并介绍了分布式文件系统分布式数据库、分布式存储等常用的组成要素。 然后,本书还通过实际应用案例来展示分布式计算系统的实际应用场景和解决问题的能力。例如,分布式计算系统在科学计算、云计算、大数据处理等领域具有广泛的应用。 最后,本书提供了相关教学参考和学习资源,包括习题和参考文献。这些资源对于读者深入理解分布式计算系统的原理和组成具有重要作用。 总之,《分布式计算系统导论:原理与组成》通过简明扼要的方式,全面介绍了分布式计算系统的原理和组成要素,深入浅出地向读者展示了分布式计算系统的基本概念、工作原理和应用案例。这本书对于学习和研究分布式计算系统的人员来说是一本很好的入门资料。 ### 回答2: 《分布式计算系统导论——原理与组成》是一本介绍分布式计算系统的相关原理和组成的书籍。分布式计算系统是指将任务或数据拆分为多个子任务或子数据,并在多个计算节点上进行并行计算和处理的一种系统。本书从理论和实践两方面详细介绍了分布式计算系统的基本原理和构成要素。 在原理方面,本书首先介绍了分布式计算系统的基本概念和发展历程,然后讲解了分布式计算系统的基本原理,包括任务划分与调度、通信与同步、容错与恢复等。这些原理是构建分布式计算系统的基石,对于理解和设计分布式计算系统非常重要。 在组成方面,本书详细讲解了分布式计算系统的各个组成部分。首先介绍了分布式文件系统,它是分布式计算系统的底层支撑,用于存储和管理分布式计算系统的数据。然后介绍了任务管理器和资源调度器,它们负责分配任务和资源给计算节点,确保系统能够高效地完成任务。接着介绍了通信中间件和数据传输协议,它们负责计算节点之间的通信和数据传输。最后介绍了容错和恢复机制,保证系统在节点故障时仍然能够正常运行。 总之,《分布式计算系统导论——原理与组成》是一本深入浅出地介绍分布式计算系统的理论和实践的书籍。通过学习本书,读者可以全面了解分布式计算系统的基本原理,以及构成分布式计算系统的各个组成部分。这将有助于读者在实际应用中设计和搭建高效可靠的分布式计算系统。 ### 回答3: 《分布式计算系统导论——原理与组成》是一本介绍分布式计算系统的教材。该教材主要围绕分布式计算系统的原理和组成展开讲解。 在原理方面,教材首先介绍了分布式计算系统的概念和基本原理。分布式计算系统是由多个计算节点组成的系统,节点之间通过网络进行通信和协作,共同完成任务。教材深入阐述了分布式系统的通信模型、一致性协议、容错原理等重要内容,使读者能够全面了解分布式计算系统的基本原理。 在组成方面,教材详细介绍了分布式计算系统的关键组成部分。其中包括分布式文件系统分布式数据库、分布式调度器、分布式存储等。针对每个组成部分,教材都给出了其设计思路、实现原理和应用场景等详细信息,帮助读者全面掌握分布式计算系统的搭建和应用。 此外,教材还涉及了分布式计算系统的挑战和趋势。随着信息技术的不断发展,分布式计算系统面临着越来越多的挑战,如数据安全、任务调度等。教材对这些挑战进行了深入的分析,并提供了一些解决方案。同时,教材还展望了分布式计算系统的未来发展趋势,如云计算、边缘计算等,使读者对分布式计算系统的未来有一个清晰的认识。 总的来说,《分布式计算系统导论——原理与组成》通过深入浅出的讲解,帮助读者全面了解分布式计算系统的原理和组成。无论是学习分布式计算系统的初学者还是从事相关工作的专业人士,都能从该教材中获得宝贵的知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值