(铁人学院 黑龙江大庆 163311)
摘要:随着时代的进步,互联网技术不断发展,网络成为了大家获取信息的主要途径。与此同时,互联网数据呈几何级增长,如何高效、快速的从中获取到我们感兴趣的内容十分值得学习和研究。目前成型的产品及开源界中有大量类似的软件,在借鉴他们优点、改进他们缺点的基础上,基于实验室的云平台构建出一个高效的分布式数据采集系统,利用丰富的云端资源来实现大规模的网络数据采集。
关键词:云平台;网络爬虫;分布式数据采集
随着时代的发展,互联技术日新月异,成为推动整个社会进步的核心科技力量,也成为大家日常生活不可缺少的一部分。通过互联网,我们可以享受到各式各样的便利,如:购物、教育、医疗、在线办公,互联网悄悄的改变着我们的生活。互联网中的信息呈现出几何增长的趋势,据统计中国网民大约八亿,每天产生约300亿条信息,拥有世界上最大的信息产生量;截止到2020年3 月4 日,作为搜索引擎巨头的谷歌,收录的网站数量约为 100 亿。即使这样它所呈现的也只是真实网络的一部分内容而已,每天全球各地新增的网站不计其数,这一数据还在不断增长。信息越来越多,同时呈现出:体量大、来源广、结构纷乱等特点。因此,如何从中高效的获取我们关注的内容至关重要。
上世纪第一代搜索引擎——雅虎成为解决该问题瞩目的新星,雅虎为众多网站建立索引,成为大家在互联中查找信息的入口,在一定程度上解决了信息过载的问题。但是随着时代的发展,越来越多的用户涌上互联网,信息呈现爆炸增长,雅虎的基于目录式索引网站的方式,不能够很好的应对当前网络的情形。因而,涌现出新的互联网巨头——谷歌搜索引擎。它缓存了编入索引中的绝大多数网页的内容。通过自身的缓存及检索机制,谷歌搜索引擎能够很好的检索出互联网中我们关注的内容,它也一跃成为网络中新的霸主。支持各大搜索引擎的是庞大的网站爬虫,以谷歌搜索引擎为例,其背后的就是叫作 googlebot 的网页采集机器人(网页爬虫)。实现类似的网页采集机器人要解决两方面的问题,一是复杂互联网中,网页与网页之间嵌套链接关系,容易重复采集。同时,对于现在大多有价值的网站,用户量越大,规模也越完善,同时反爬措施也越为完善,进一步提升了采集的难度;二是数据源较大时,需要庞大采集节点的集群。以上两点,一个是从采集内容自身的层面,另一个是从采集的支撑层面而讲的。就支撑层面而言,对于大规模采集一般均使用分布式采集的方式,包含一个或多个中心,以及多个采集节点,各个采集节点受充当控制的中心节点进行调度。同时,对于网页的下载、网页分析、网页内容提取、集群的并发调度等,均体现 CPU 密集型和网络 IO 密集型的特点。以上这些均需要庞大的硬件支持。对于稍小规模的公司这不是一个友好的内容。
近年来,云计算飞速发展,它是一种利用互联网的计算方式。通过该方式共享的软硬件资源和信息可以按需的提供给终端和其他设备。本文想通过研究提出一种基于云平台的分布式数据采集系统,充分利用云端资源价格低廉的特点,来解决硬件资源昂贵的问题。同时,充分调研了业界现有分布式数据采集系统的特点,对它们的优点和不足,在我们自己实现的系统上进行了继承和改进。在实现技术革新的同时,也解决了实际问题。因此,我感觉基于云平台构建分布式数据采集系统还是很有意义的。
下面的部分中,我们介绍一下近年来开源界中经常使用的 scrapy 框架,以及成型的商用采集框架八爪鱼采集器。Scrapy 是使用 Python 语言开发的网络爬虫框架,因为它是一个框架,所以任何人都可以根据自已的需要来进行改进。优点众多,如:1.系统中提供了HTTP 缓存功能,针对 DNS 解析等问题实现了内部优化。2.实现了自动节点调节机制,提高了爬虫针对反爬措施下的健壮性。3.同时,可以在配置文件中自行定义爬行深度,以避免爬虫进入死循环等等。它主要由七部分组成:Scrapy Engine、Schedule、Downloader、Itempipeline 几个部分。Scrapy Engine 充当控制中心的角色,协调其他几个模块,传递信息;Schedule,充当调度器,负责将来自引擎的 Request 请求加入待下载的队列中、Downloader 负责完成页面请求,然后将其传递给 Spider对象进行处理、Spider 部分是用户实现分析响应,同时完成页面内容提取的地方,将提取的内容封装成 Result Items 传递给 Item Pipeline。可见 scrapy 对整个采集过程进行了详细的划分,并接管了大多数需要复杂处理的工作。但是,其内部使用的是布隆过滤器,布隆过滤器对于小规模数据采集是没有问题的,但是在上亿 URL规模中存在大量的充容问题不可以忽视;同时,其还不支持分布式的,针对大规模数据采集也不是特别合适的。
八爪鱼采集器。八爪鱼采集器是一个成熟的产品,官方的口号是无需任何编程基础均可实现数据采集。每交采集过程中选择相应的网站模版即可,网站模版中定义了一系列要采集的内容;之后打开采集的配置参数页面,设置参数即可采集。八爪鱼采集器结合了云端资源,分布式的集群架构,可以高效的完成任务调度,它的云端硬件支持每日 10 亿数据采集规模。同时,系统内部保存了大量的网站模版,对于要采集的内容用户需编程实现,只需要简单的设置即可。也支持多种格式导出,支持快速导出到数据库。
以上是一些商用成型的采集框架及免费的开源采集产品,其中各有各的优点值得我们学习,典型的如 scrapy 的插件化的配置;八爪鱼的采集模版等等。这些优点是是他们智慧的结晶,值得我们认真学习。同时,他们也有自己的不足,针对不足,我们要在自己的实现中牢记和改进。
【参考文献】
[1] 汪兵.基于 Scrapy 框架的分布式爬虫系统设计与实现[D] .合肥工业大学,2019.
[2] 孙瑜.基于 Scrapy 框架的网络爬虫系统的设计与实现[D] .上海交通大学,2019.
[3] 张晔,孙光光,徐洪云,庞婷,曲潇洋.国外科技网站反爬虫研究及数据获取对策研究[J].竞争情报
,2020,16(01):24-28.
[4] 伏康,杜振鹏.网站反爬虫策略的分析与研究[J].电脑知识与技术,2019,15(28):28-30.
【作者简介】
和乾(1981)男,黑龙江大庆人,讲师,大学本科, 主要从事计算机网络专业网络安全、网络操作系统的教学及安全理论考试点的运维工作。