论文部分内容阅读
对于网络爬虫进行了一种基于Hadoop的分布式网络爬虫的设计与研究,随着互联网时代的到来,互联网技术迅速得到发展,网络上的网络资源也在快速增长。面对互联网上的各式各样的资源,想要能够快速而又准确的找出需要的资源变得不再那么简单。通过搜索引擎便能完成对信息的检索,而搜索引擎与网络爬虫密不可分,只有通过网络爬虫在互联网上爬取到更多的信息资源,搜索引擎才能完成相应的操作。因此,网络爬虫的设计十分重要。如今,已经有越来越多的公司和组织开始致力于设计高效的爬虫系统来对互联网上数以十亿的网页资源进行爬取。由于互联网上庞大的数据资源,传统单机的网络爬虫的抓取和解析效率已经远远达不到现如今的需求。因此,采用基于Hadoop集群来开发,并对网络爬虫在DNS解析、URL抓取、文件解析、URL获取、URL处理以及判断模块进行设计和优化。对于DNS解析模块,通过在上一轮抓取任务开始时,在节点上创建一个解析下一轮待抓取URL的线程来对域名进行提前解析,并将解析的结果存入DNS缓存区中。通过这种预处理过程和缓存区的设计,使得爬虫系统在下一轮抓取任务开始时,不需要等待解析域名过程的完成,而直接去DNS缓存区中获取对应的IP地址映射。这可以有效的增加爬虫系统的效率。在抓取模块中,采用了PageRank算法对URL的重要性进行判断,对待抓取的URL按照PageRank值的大小进行抓取。通过对互联网中网页各种出链形式的分析,采用迭代的思想得到每个网页初始的PageRank值。再依据互联网中出链的指向情况来相应的增加网页的PageRank值。由于网页PageRank值的大小从侧面反映了互联网中出链指向该网页的数量,也决定该网页的重要程度,使得抓取顺序即为网页重要性程度的顺序。这大大降低了垃圾网站的无关信息出现在搜索结果中的机率。文件解析模块中,通过实现Apache Tika对外提供的外部接口,并调用其中的工具来完成对于不同文件的解析和处理。将解析出来的信息中的URL资源信息进行提取,并匹配正则表达式的格式,来判断URL是否合法。在处理模块中,针对网络中网页相似度较高甚至重复的情况,通过采用指纹生成算法中的Simhash算法,对网页文本信息进行分词操作,并对分词设定权重级别。通过每个分词对应的hash值和权重级别,进行加权计算并得到相应的加权值。再合并分词的加权值就可将文本信息转换成长度一定的序列串。通过降维的方式,可以将文本信息相似度的对比转换成比较相应二进制序列串的对比。通过统计二进制序列串中对应位置上数字不同的个数,得到海明距离。爬虫系统会将海明距离小于3的网页判定为重复网页,不进行重复抓取而直接舍弃。URL获取模块通过MapReduce算法的计算获取URL信息,并将已抓取的URL状态更改为已抓取状态。将抓取到的URL资源传递给判断模块,通过判断URL种子库中是否已经包含了该URL资源,来决定对URL资源进行不同的处理。如果包含该资源,爬虫系统会直接舍弃该资源;如果不包含,则会将该资源加入到URL种子库的末尾。通过在URL种子库中加入不同数量的URL来测试爬虫的功能,结果显示URL种子库中URL数量不同时,都能够完成从URL种子库中的URL为起点抓取到互联网中的URL资源,并且在抓取过程严格按照PageRank值的大小顺序进行抓取。在URL种子库中放入两条重复的URL时,通过Simhash算法的计算后海明距离小于3,来判定两个网页为重复网页,只进行了一次抓取动作。又在不同节点数的集群下完成抓取过程时,通过对抓取的网页数量和抓取时间的统计,计算出了不同节点数的集群下的抓取速率,得出节点数越多速率的波动越小,且最后抓取速率会基本稳定在某个固定值附近作上下波动的结论。通过速率大小的对比,得出节点数越多网络爬虫抓取的速率越大,但随着节点数的不断增加,抓取速率的增长程度会不断变小。