论文部分内容阅读
随着大数据时代的到来,数据的价值越来越受到人们的重视。海量的网络新闻数据具有巨大的商业价值和研究价值,可以通过网络爬虫爬取网络新闻数据。传统的单机网络爬虫不能爬取每天新增的大量网络新闻。现有的爬虫框架大多数不支持分布式爬取,已有的分布式爬虫框架通常是为搜索引擎设计的,难以修改框架满足特定的需求。因此本文设计并实现了一个基于分布式的网络爬虫系统,用于爬取新闻网站上的新闻数据。本文的主要工作如下:(1)结合Storm流计算框架和Scrapy爬虫框架,设计并实现分布式网络爬虫系统。Scrapy爬虫框架不支持分布式爬取,本文在Storm分布式平台上运行Scrapy爬虫进程,实现网络爬虫的分布式爬取。Trident是对Storm的高级抽象,不仅支持以数据流的方式处理数据,而且支持以批处理的方式处理数据。本文采用Trident框架实现Storm分布式平台,以流处理和批处理的方式处理URL。(2)提出基于多布隆过滤器的URL去重算法。布隆过滤器是由一个很长的二进制位数组和一系列随机均匀分布的哈希函数组成,可以检测一个元素是否存在于集合中。布隆过滤器具有误识别率,将不属于集合的元素判定为属于。本文通过使用多个布隆过滤器降低误识别率,对URL进行去重处理。通过测试表明误识别率随着本算法使用的布隆过滤器个数的增加而下降。(3)提出基于优先级的广度优先爬行策略。广度优先爬行策略将新闻网站上的网页分为不同的层次,爬取完同一层的所有网页后,才爬取下一层的网页。该策略实现比较简单,主要采用一个先进先出(FIFO)结构的URL队列。本文将URL的类型分为三种,对不同类型的URL设定不同的优先级,设计一个同时具有优先级和先进先出性质的URL队列,实现基于优先级的广度优先爬行策略。(4)以递归爬取方式提取非结构化数据。提取非结构化数据的技术有三种:正则表达式,BeautifulSoup和Xpath表达式。爬取完整的评论数据通常需要发送若干个HTTP请求,本文以递归爬取方式爬取到完整的评论数据,将评论数据作为新闻数据的一个数组类型字段,最后将新闻数据以文档的形式保存到MongoDB数据库中。最后,本文对分布式网络爬虫系统进行了功能测试和性能测试,验证了通过增加爬虫数,可以提高网络爬虫的爬取速度。