分布式网络爬虫系统
   来源:中国科技博览     2018年03月13日 07:07

网络爬虫更新策略和分布式抓取系统机构

[摘 要]网络爬虫是搜索引擎的关键组成部分,直接影响到搜索引擎的性能。随着互联网信息飞速增长,分布式网络爬虫已经占据主流。本文研究基于Hadoop平台开发一个分布式网络爬虫系统。本文应用了广度优先爬取策略,网页去重时采用了布隆过滤器算法。功能模块划分为网页抓取模块,网页解析模块,网页存储模块,已访URL识别模块;存储库包括待抓取URL库,原始网页库,链出URL库,已爬取URL库。使用了两个MapReduce过程,将各个功能模块实现在Map和Reduce过程中。最后对分布式爬虫系统做了功能测试和性能测试,测试结果说明分布式网络爬虫系统实现了爬取网页的功能,达到了一定的性能要求。

[关键词]网络爬虫;Hadoop;分布式

中图分类号:V583.6 文献标识码:A 文章编号:1009-914X(2017)18-0288-01

1 研究背景和意义

因为互联网上信息量的急速增长,传统单机的网络爬虫系统已经无法满足网络用户对搜索引擎的性能要求。因此,分布式网络爬虫系统应运而生。但是对于分布式系统而言,集群内节点之间底层通信和任务同步等技术问题一直是开发者难以逾越的鸿沟。伴随着Hadoop框架的日趋完善,基于Hadoop框架开发一个分布式系统已经成为了一个优越的解决方案。Hadoop提供基础设施,免费的分布式系统的开发,用户可以在不了解分布式系统应用水平的细节的发展,充分利用集群的强大功能,高速运算和存储,是开发一个分布式网络爬虫系统的首选方案。本课题在Hadoop平台上开发一个分布式爬虫系统。Hadoop框架虽然应用场景非常广阔,但用于网络爬虫系统开发的案例却寥寥无几。所以本课题一方面实现一个分布式网络爬虫系统用于研究分布式系统较之单机系统的优越性,一方面将Hadoop框架用于爬虫系统的开发做以尝试。

2 系统结构设计

网络爬虫的基本流程为:

1.网页爬取模块从待爬取库中取出URL进行网页爬取。网页爬取模块的输出结果包括两部分,其中将已爬取的URL存储进已爬取URL库,另一方面将爬取来的原始网页传递给网页存储模块。

2.网页解析模块从原始网页库中取出原始网页,进行解析,提取出新的URL然后存储进链出URL库。

3.已爬取URL识别模块首先从链出URL库获得新URL,将新URL去重复。剩下的URL再结合已爬取库过滤掉已经爬取的URL。

4.判断是否符合结束条件,如果符合,结束程序。如果不符合,将过滤后符合条件的URL存入待爬取URL库。网页抓取模块继续抓取,循环执行。

本分布式网络爬虫系统总共四个功能模块,两个MapReduce过程。每个过程的Map,

Reduce各实现一个功能模块。另外一个主类负责整个系统的运行控制和与用户交互。下面分别介绍。

2.1 网页抓取模块

此模块对应MapReduce中的一个Map过程。从HDFS待爬取URL库中获取待爬取URL集,然后Hadoop自动对输入进来的URL级进行一个Split操作,将URL集合分片成一条条URL,分别送到各个节点上执行Map过程。最后各节点分别爬取相应网页。最后以键值对输出到临时文件。此处key为URL,value为URL对应的原始网页。

2.2 网页存储模块

此模块对应MapReduce中的一个Reduce过程。从临时文件获取键值对。本模块对数据不做任何特殊处理。只是简单以URL为文件名,以HTML为文件内容输出到HDFS。

Hadoop默认的输出文件名为part-00000,并且所有内容不会分文件存放。为了让各个原始网页文件内容独立存放,并且文件名采用原始网页对应的URL命名。所以需要重写JAVA接口的方式来控制文件输出。

2.3 网页解析模块

网页解析模块对应MapReduce的一个Map过程。从HDFS获取原始网页作为参数输入。同样Hadoop自行执行Split过程将输入以原始网页为单位分片。将各个分片分配到各节点执行Map操作。通过正则表达式匹配出所有超链接。然后将超链接以键值对输出到临时文件。这里所采用的正则表达式为:"|\']"。

2.4 已访URL识别模块

此模块是一个MapReduce过程中的Reduce过程。主要针对为防止网络之间的环路而造成的循环爬取的问题。模块从临时文件获取解析出的URL,通过与已爬取URL库做比较过滤掉已经爬取过的。将符合条件的集合以格式输出到HDFS。

因为平均一条URL平均需要50个字符。面对上亿条URL的存储与查询是一个非常大的工作量。为了快速的查询并付出最少的内存,本系统采用布隆过滤器来实现已爬取URL库的操作。

2.5 主控模块

负责和用户交互,并根据用户的命令调度其他各个模块完成工作。

因为当向布隆过滤器添加记录是,集群内各个节点之间难以同步。所以主控模块负责将已经爬取的URL添加进布隆过滤器以供已爬取URL识别模块去重。

3 创新点

在本分布式网络爬虫系统的设计中,除了总结参照前人的一些实现方法之外。在一些设计上做了创新。所有功能模块实现在MapReduce之中。本系统设计了两个MapReduce过程。用于完成网页爬取和网页解析等功能。数据通过Hadoop管道在各个过程中传递。除此之外,本系统的网页去重部分没有使用Java内置的容器HashSet。而是自行设计了布隆过滤器算法,以保证过滤的时间和空间效率。

4 总结与展望

经过测试本课题分布式网络爬虫系统可以完成基本功能。可以很好完成爬取网页,解析网页等多项任务。由于是用一台虚拟机模拟整个集群系统,虽然对程序来说是在一个集群内完成工作,单底层仍然是单台物理主机。除此之外,反而增加了任务分配,节点通信这些额外开销。所以从爬虫速率上无法达到真正的分布式网络爬虫系统的要求。

由于开发周期比较短,所以本分布式網络爬虫系统还存在一些缺陷。包括以下:

1、解析网页时不能解析网页中的图像视频资源,使得爬取下来的网页不够完成。所以后期应该附加这项功能,使得爬虫系统可以很好的爬取网页上的所有资源。

2、Hadoop平台还有一个分布式开源数据库HBase,后期应该尝试用HBase数据库来实现分布式网络爬虫系统的存储库。

3、冲突率是评估一个布隆过滤器算法的重要指标,所以设计良好的哈希算法非常重要,后期应该改进哈希算法降低冲突率。

参考文献

[1] 中国互联网络信息中心(CNNIC),《中国互联网络发展状况统计报告(第三十三次)》.2014.

[2] 程锦佳.基于Hadoop的分布式网络爬虫及其实现[D].北京邮电大学硕士学位论文,2010.

[3] 蒋建洪.主要分布式搜索引擎技术的研究[J].科学技术与工程,2005,5,36(4),13-15.

[4] Roc1'oL.Using genetic algorithms to evolve a population of topical queries.Information Processing and Management,2008(44):1863-1878.

作者简介

张雪鹃(1996.05--),女,广东省广州市人,本科,专业:在读学生。

文章 爬虫 分布式