购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

网络爬虫系统

网络爬虫系统是舆情监测系统的基础和核心模块,一个完整的网络爬虫其实是一个很复杂的系统。在舆情监测领域,它主要负责定向数据采集和网页文本挖掘。除了常规爬虫的网页采集、链接跟踪等功能外,还带有网页主题识别和价值文本抽取等功能,文本挖掘部分将在下一章中详细介绍。事实上,舆情监控使用的爬虫跟普通的网页信息采集系统,并没有很大的区别,但它需要人工进行设置,不过数据抽取更精准,更高效。有人这么形容网络爬虫系统:

它是一个海量数据处理系统,因为它所要面对的是整个互联网的网页,即便是一个小型的,垂直类的爬虫,一般也需要抓取上十亿或者上百亿的网页;

它也是一个对性能要求很好的系统,可能需要同时下载成千上万的网页,快速提取网页中的url,对海量的url进行去重等等;

它确实是一个不面向终端用户的系统,所以,虽然也很需要稳定性,但偶然的当机并不会是灾难,而且,不会出现类似访问量激增这样的情况,同时,即便短时间内出现性能的下滑也不会有太严重的影响。从这一点来看,爬虫的系统设计在某些部分又变得简单了许多。

一套完善的网络爬虫系统,应该具备以下特点:

· 良好的框架结构;

· 合适的网页采集技术;

· 高度优化的代码;

· 易于配置和管理。

一般情况下,爬虫系统一旦正式运行起来,就不会轻易停下来,良好的框架结构可以保证爬虫在这个漫长的作战过程中尽量少犯错误,占用较低资源;同时,良好的框架结构也为扩展和增强爬虫的功能奠定良好的基础。

在爬虫的长时间运行过程中,如果不对代码做高度优化,那么万一出现内存泄露,对爬虫而言,将会是致命的打击;另外,经过高度优化的代码,可以使CPU占用处于低位,如此,便可保证同样的服务器硬件上,爬虫的效率、速度和稳定性都会有质的提高。

爬虫系统不是智能的,很多情况不能够自己判断并做出决定,但是为了让爬虫变得聪明,往往需要配置大量的参数来“指导”和管理爬虫工作。

一.网络信息采集的核心技术

总体来说,完整的网络爬虫系统主要包括两部分:网络信息采集和页面信息提取,对应的技术主要包括网络爬虫(Web-Crawler)和网页去噪(WebPage Cleaning)等。网络爬虫,也可以称为Web信息采集技术。如果互联网是一张大图,那么网页就是一个个节点,网页之间的链接关系则可以理解为连接节点的一条条弧线。Web 页面采集技术就是在此基础上以一个网页为中心出发,根据图论的遍历方法来自动获取其他页面,被形象地称为网络爬虫技术(Crawler)。网络爬虫技术通常以一个或多个种子URL作为工作的起点,通过各类端口发送按照 http 协议格式的指令,如GET、PosT和HEAD格式等。

正常情况下,网络服务器根据申请指令的内容返回相应格式的文档,通常是以 HTML 文档、XML文档以及音频、视频等格式多媒体信息。此时,网络爬虫技术则通过采集模块收集和返回文档中有价值的信息并保存至缓存区(Cache),经过整理搜索到的信息传送到数据库中保存。

网络爬虫会继续选择模块提取文档中新的超链接进行访问,同时,按某种过滤策略去除己被访问或是不宜访问的超链,如此反复循环,按照一定的搜索策略对互联网 Web 文档信息进行遍历搜索。为了提高爬虫的爬行策略和采集效率,大型复杂搜索引擎的网络爬虫都基于分布式并行设计。

(一)主题爬虫技术

一般情况下,网络爬虫分为通用爬虫(General Purpose WebCrawler)和面向主题爬虫(Focus Crawler,Topical Crawler),通用爬虫的目标是尽可能多地采集信息页面,并不太在意页面采集的顺序和被采集页面的相关主题,这样消耗了很多的系统资源和网络带宽,但并没有换来采集页面的较高利用率。一般网络舆情采集是面向行业领域,建议采用主题爬虫,也叫做聚焦爬虫,保证尽可能多的爬行,下载与主题相关的网页,尽可能少地下载无关网页。主题爬虫”这一概念由S.Chakrabarti在1999年的WWW大会上首次提出,主题爬虫与通用的网络爬虫不同,它是面向主题的、有选择地爬行,保留有用的链接。

主题爬虫是主题搜索引擎的基础,其抓取网页的速度和质量是决定搜索引擎好坏的重要指标。主题爬虫的工作流程较为复杂:根据一定的网页分析算法过滤与主题无关的链接,遵循一定的调度策略从队列中选择下一步要抓取的URL,同时系统存储的网页经过分析后的结果会反馈回来指导后续的抓取过程。

与通用爬虫不同,主题爬虫并不追求高的覆盖率,而是选择性地取主题相关页面,具有资源占用低、索引数据库更新方便、缓存页面精确的优点。

(1)通用爬虫并不在意页面采集的顺序,主题爬虫则需要高效抓取主题相关的网页。

(2)主题爬虫与通用爬虫在系统需求、工作流程和核心算法上都有根本差异,虽然可以从传统爬虫架构中汲取一些成熟的性能策略(DNS缓存、URL数据结构等),但是系统架构依然需要大量改进。

主题网络爬虫主要有两种技术:基于Web链接分析的搜索、基于Web内容分析的搜索。通过改进的 Shark-Search搜索策略算法对网页中提取的URL进行预测,通过计算网页内容及主题相似性,实现了基于开源Larbin的主题网络爬虫Tlarbin。应用广泛的开源软件有Larbin、Heritrix和Nutch。在舆情采集系统中使用较多的是开源的面向主题的网络爬虫Heritrix,用户可以根据自己的需要进行修改移植。

Heritrix是一个爬虫框架,可加入一些可互换的组件。Heritrix工程始于2003年初,Heritrix在古语里是女继承人的意思,网络爬虫是指从网络上搜集和保存资料以利于未来的研究者和后代,也是一种继承,所以Heritrix是很贴切的。

图1-7展现了Heritrx爬取网页的流程,每次只获取一张网页,并不考虑充分利用它的资源。由爬虫维护的尚未访问URL列表被称为队列(Frontier)。该队列初始化的时候仅存放由用户或其他程序提供的种子URL。每次程序的主循环中,爬虫先从队列中取出下一个URL,通过HTTP协议将对应的网页爬取下来,然后解析内容,并且提取出包含的URL,将其中新发现的URL追加到队列中。最后将网页存放到本地磁盘的网页库中。爬取过程在积累到一定数量网页时即可终止;或者在队列为空的时候终止。

所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于主题爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。相对于通用网络爬虫,主题爬虫还需要解决三个主要问题。

(1)对抓取目标的描述或定义,由于面向主题的搜索引擎需要有一定的抓取目标,抓取的信息应该满足客户的要求,信息定制就是让用户定制自己想要监测的内容,通常有给出关键词或者相关描述。

(2)对网页或数据的分析与过滤,对网页进行主题过滤。网络上的网页数据是海量的,往往最终用户希望搜集的数据只是其中很少一部分,而大量的数据都是与主题不相关或相关度较低的,所以,聚焦爬虫通常对网页进行主题过滤,以滤除不相关或者相关度较低的网页。

(3)对URL的搜索策略。

· 以一定的启发式搜索策略算法控制信息资源的抓取,WWW是一张巨大的信息网,如何引导主题爬虫有目的、有控制地抓取与特定领域相关的Web页面信息是一个关键问题。为了达到这个目的,聚焦爬虫通常采用某种启发式搜索策略算法,根据用户设置的主题导向词或者主题表示模型,以启发式函数计算每个URL的权值,并进行Web排序选择权值高的URL优先访问,同时放弃未到达预定阀值的URL。

· 寻找和发现高质量网页和关键资源,关键资源是指一个包含许多指向特定主题的超链接的网页;高质量网页是指能够从内容中知道主题的网页。由于网页信息分布通常呈现不均匀性,通常,指定主题的关键资源总是链向高质量网页,寻找和发现高质量网页和关键资源不仅可以大大提高聚焦爬虫搜集Web页面的效率和质量,还可以为主题表示模型的优化等应用提供支持。

采用面向主题网络爬虫主要面对的问题是如何确定URL搜索策略,目前,主题网络爬虫主要有两种搜索策略:基于Web链接分析的搜索、基于Web内容分析的搜索。

1.基于分类器的Web链接分析主题爬虫

目前大多数的聚焦爬虫都采用了类似的工作流程。根据一个主题目录和客户指定的初始种子(关键词)来描述抓取主题,并根据抓取的结果不断修正主题样本。系统的两个主要部分是网页分类器和网页选择器,网页分类器负责学习抓取目标的特点,计算网页的相关度,并过滤网页。网页选择器负责计算网页的重要程度,发现中心网页,并由此动态决定网页的访问顺序。

2.基于数据抽取器的内容分析主题爬虫

主题爬虫从网络上发现主题相关的资源网页传递给数据抽取器进行数据抽取工作。数据抽取可能是对Hiddenweb之后的数据库进行探测查询,也可能是通过Web或网页外观格式信息进行数据抽取。得到的元数据将由数据分析器做分析和标注,这样的数据才能转化为符合系统数据库模式的结构化数据进而进行数据的存储和数据的索引。

以上两种URL搜索策略都比较常用,不同的公司会根据自身的业务模式和资源选择。大部分公司会选择使用基于分类器的搜索策略,但一般都会做进一步优化。

在使用主题爬虫的过程中,选定监控目标对象集(网站、论坛、博客等信息来源地址),设置主题关键词,进行信息捕获并存入舆情信息库,需要考虑三个重要的策略性事项。

(1)在采集效率上,为保证舆情监控的实时性,可根据需要设定下载网页的层数,同时实现多对象、多线程并行采集。其次,为避免因抓取速度过快、抓取频度过高造成目标网站服务器拒绝服务的问题,需根据目标网站的下载速度决定下载的线程数及请求的频率。最后,初次遍历目标对象后,下次遍历时,只需下载新更新的页面,提高效率。

(2)在采集算法上,通过引入具有页面采集顺序及主题相关性识别机制的主题网络爬虫技术,定向抓取目标网页资源。它主要基于Web页面间链接结构的分析确定页面的重要性,进而决定采集顺序的策略。

(3)在采集周期上,需根据目标网站的信息量、访问量、信息更新频率等因素自动设定信息采集的周期,例如新闻类网站的更新频率(以分钟或小时计算)高,抓取的间隔时间就要短些。

(二)网页去噪技术

通过爬虫系统将网页抓取回来后,紧跟着需要对网页进行处理,网页处理首先需要分解出网页中的有用信息单元和无效(或作用不大)单元,往往采用网页去噪和提取技术。浏览Web上的网页,会发现它们通常包含两部分内容:一部分内容体现的是网页的主题信息,比如一张新闻网页中的新闻部分,称为“主题内容”;另一部分则是与主题内容无关的导航条、广告信息、版权信息以及调查问卷等内容,称为“噪音”内容。噪音内容通常分布在主题内容周围,有时也夹杂在主题内容中间,它们通常以链接导航文字的形式出现,噪音内容一般无内容相关性,同时,它们链接的网页常常也无内容相关性。

快速准确地识别并清除网页内的噪音内容(称之为网页去噪)是提高Web应用程序处理结果准确性的一项关键技术。首先没有噪音内容的干扰,Web应用程序可以以网页的主题内容为处理对象,从而提高处理结果的准确性;其次,网页去噪可以显著简化网页内标签结构的复杂性并减少网页的大小,从而节省后续处理过程的时间和空间开销,因此,网页去噪已成为信息采集系统中一个必不可少的工作。

网页去噪主要分三步。

· 首先是去除页面中的注释、脚本、样式表等无关信息。

· 然后再将页面划分为若干块,包括文本块、链接块、图像块等。

· 最后按照语义对各块做进一步区分,如从文本块中区分出广告等非关键信息块、从链接块中区分相关链接块、导航链接块、广告链接块等不同内容。

经过上述处理后,Web页面在结构和语义上都被划分为细粒度的信息块,从而使后续的信息加工处理工作得以顺利进行。

信息提取领域,国内外已经进行了大量的工作,并使用各种不同的方法来解决相关的问题。比如Finnn、哥伦比亚大学自然语言组的McKeown、Rahman、Buyukkokten、Kaasinen、北大张志刚等前辈。

尽管在网页去噪和提取方面已经有很多人在研究,也提出了一些可以辨认内容及清洗页面的简单方法,但没有一种方法可以很好地解决自动清洗页面的任务。不过我们可以在一种方法基础上做适当的优化来大幅提升清洗效率。

网页去噪和提取分析方法主要分为三类:基于树结构分析方法,基于Web挖掘方法,基于正则表达式方法。

基于树结构的分析方法应用比较广泛,页面清洗比较方便,为了分析网页,首先通过HTML解析器把网页解析成一个DOM(Document Object Model)树的结构。通过把网页解析为DOM树使分散的网页有序化,会使内容信息的抽取更加简单和灵活。DOM树具有很强的可塑力,能够很容易地重构一个完整的网页。开源软件Htmlparse是比较有代表性的工具,这种方法利用了中文网页中内容信息结构相似和分布聚集的特性,实现简单、通用性好,缺点是高度依赖每个网站网页的结构。

基于Web挖掘的网页去噪方法,通过建立HTML标记信息和数据冗余的噪音判别模型取得良好的去噪效果。

基于正则表达式方法,通过使用Xpressive技术实现了一种基于静态正则表达式的网页去噪方法,该方法算法直观简单易实现,效率相对来说最高,缺点是后期维护成本非常高,需要有相关的人员长期持续维护。比较适合新闻媒体的信息清洗和提取。

上面介绍的几种方法在应用上都有一定的局限性。我们可以看到,目前的网页数据抽取工具,都需要针对特定的数据源来编写对应的抽取规则。即针对某一特定的网站的网页书写规则,这样就产生了程序适应性不强的问题:如果目标网站有所改动,必须随时修改程序,而且往往修改调试起来非常繁琐;如果抽取对象是多个网站,就需要书写多个规则,这样规则的维护是一项很复杂的工作。

通常情况下,以上方法经常会组合使用,提高清洗和提取的效率。比如对于结构部分规则的网页我们会先采用树结构方法先清洗规则网页,然后用正则表达式对不规则部分进行清洗。

二.爬虫系统的高级技术

爬虫的核心,无非就是网页获取、链接抽取、文本抽取,稍微高级一点即是权重分析、网页去重、更新策略,再高级就是人工智能和分布式集群了,我们这里介绍两个经常会涉及的高级技术。

(一)URL去重技术

首先,我们必须理解什么是URL去重,URL去重的作用是什么?众所周知,互联网中链接数量庞大,独立的连接有上百亿个,当爬虫爬行时,难免会遇到重复将相同的URL加入到等待爬行的队列当中,这样不可避免地将使爬虫做重复无用的工作,大大降低爬虫的效率。如果没有条件地重复爬取某—个URL会造成带宽,存储器等资源的严重浪费,而且,更严重地是有可能会引起爬虫在一个链接组组成的环里进行死循环,使程序陷入所谓的爬虫陷阱里面。因此,对爬行的链接进行下载之前,我们要分析网页是否已经存在于爬行队列当中,以免重复,这个过程就是URL去重。URL去重是spider中最麻烦的一个地方,就算是最小的爬虫,URL库也是百万数据量级的。如果去重的速度不够快,会极大影响下载的速度。因此, URL去重是分布式爬虫系统的核心内容。

URL的去重操作通常有以下几种常见的方式,下面我们详细介绍各种去重方式的优劣。

1.基于数据库的去重方式

所谓基于数据库的去重方式,就是所有的URL链接存储于数据库当中,在对URL进行去重的过程中,需要遍历数据库的每条记录,如果查找到与指定URL相同的记录,则认为URL应该去重,否则,将URL加入到任务队列当中;对于爬行结束的URL,应该依次插入到数据库当中,表示该URL已经被爬行过。

基于数据库的去重方式是比较常用的一种分布式网络爬虫的去重方案,因为它的URL去重稳定性非常高,也非常适合URL的任务调度。但是基于数据库的去重方式却有一个非常致命的缺陷,就是去重效率非常低,当数据库的记录数超过百万时,数据库的性能会急剧下降。所以,基于数据库的去重方式的时间效率成为了整个分布式系统的瓶颈。

2.基于内存的去重方式

基于内存的去重方式,只用内存去重,每次开始下载时把URL写到内存的hash表中,然后通过hash表去重,这方案看上去很快,但有个严重问题,内存不可能这么大,内存资源很快就会被耗光,导致整个分布式系统的任务调度出现瘫痪。

3.基于磁盘路径的去重方式

此种基于路径的去重方式具有较高的时间效率,但是不适用于一个面向全网爬行的大规模分布式爬虫系统,因为随着爬行的深入进行,URL数量不断增大,对应每个URL都创建了相应的路径,将使系统碎片增大,最终会导致总控服务器的磁盘系统崩溃瘫痪的后果。但是对于小规模针对局域网的网络爬虫来说,这种基于磁盘路径的去重方式,不失为一个效率比较高的去重方式。

4.基于布隆过滤器的去重方式

在网络爬虫里,判断一个网址是否被访问过,最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hashtable)来存储的,它的好处是快速准确,缺点是费存储空间。

通常情况下会综合以上多种URL去重的方法,结合分布式网络爬虫的实际需要,加以结合和改进,尽量去减少URL去重的单次时间,可以在一定程度上提高整个系统的URL去重效率。

(二)分布式爬虫

一般的舆情监测系统使用集中式主题爬虫基本可以满足抓取的需求,但随着网络信息爆炸式增长,特别是社交媒体的出现,信息量暴增,会存在多个爬虫并行的工作,那么如何在各个爬虫间协调工作,是一个非常重要的问题,这也是分布式爬虫所需要解决的最重要的问题。

当爬虫程序所要爬取的内容规模到了一定的程度,分布式就成了必须的选择。分布式爬虫系统是运行于机器集群之上的,集群中每一个节点都是一个集中式爬虫,其工作原理与集中式爬虫系统的工作原理相同。这些集中式爬虫在分布式爬虫系统中是由一个主节点控制来协同工作的。由于分布式爬虫系统要求多个节点协同工作,这样多个节点需要相互通信来交互信息,所以搭建分布式爬虫系统的关键是网络通信。因为分布式爬虫系统可以利用多个节点抓取网页,所以分布式爬虫系统的效率远远高于集中式爬虫系统。

分布式的结构通常有两种选择:中心节点分布式;完全的分布式,即不存在中心节点。

中心节点分布式的优点在于中心节点可以很方便地负责各种控制和协调工作,中心节点负责任务的分发,URL判重等,但是这样做的缺点是中心服务器很可能成为系统的瓶颈,而且一旦中心节点无法正常工作,会导致整个系统瘫痪。完全分布式的结构会极大提高容错性,但是缺点也很明显:系统的结构会变得很复杂,为了在不同节点间协调和同步工作,可能会引入复杂的协议和大量的通信开销。

对于舆情监测来讲,通常使用中心节点分布式,完全分布式的架构带来的容错性很可能并不需要。完全分布式中有一些称为伪完全分布式,这些分布式使用一个数据库保存所有爬取的内容,事实上这个数据库起到了中心节点的作用。

不管哪种形式的分布式,都需要注意以下几个问题。

· 保证不同节点间的负载得到较好的平衡;

· 判断一个地址的数据是否已经下载过,并进行储存,存储的数据必须保证完整性与一致性;

· 保障在某个节点出现问题后它所负责的任务可以合理地分配给别的节点且能方便地加入新的节点。

图1-8 网络爬虫工作流程图

三.Hadoop与爬虫系统

提到分布式就不得不提Hadoop,它是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点。

· 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。

· 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

· 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

· 高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

· 低成本:与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,Hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop的框架包括两个核心模块:HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算。结合网络爬虫系统来看,爬虫系统的四个存储结构:待抓取URL库、原始网页库、链出URL库、XML库都存在于Hadoop的分布式文件系统,以HDFS为载体。五个核心功能模块:负责生成和执行抓取队列的CrawlerDriver模块,解析网页内链接的ParserDriver模块,过滤和优化URL的OptimizerDriver模块,整合和管理原始网页的MergeDriver模块,预处理网页的HtmltoXLMDriver模块,每一个模块都是基于Hadoop开发的Map/Reduce过程。

基于Hadoop的分布式网络爬虫系统与常见的单机版集中式网络爬虫相比具有很多优点。具体可从7个方面来描述。

(1)可扩展性:基于Hadoop框架的爬虫系统具有良好的可扩展性,可以很轻松地增加机器节点,使多台机器协同工作。而传统的集中式爬虫系统缺乏节点的扩展性,即使是在多台机器上全部部署也无法使这些机器协同工作。

(2)存储方式:基于Hadoop的爬虫系统将抓取下来的网页保存在集群的分布式文件系统(EDB)上,分布式文件系统的网页数据很容易管理而集中式爬虫系统采集下来的网页是保存在本地文件系统上的。

(3)网页预处理:基于Hadoop的爬虫系统对抓取下来的网页信息进行预处理,将原始网页转换为XML格式,这样的半结构化信息有利于后期的信息处理和索引。而集中式爬虫只保存网页的原始HTML信息。

(4)抓取效率:由于Hadoop是采用分布式架构,多台机器可协同去抓网页,同时在每台机器上还是多线程抓取,所以效率必然比单机抓取网页效率高非常多。

(5)吞吐量:采用Hadoop分布式的爬虫系统的吞吐量要远远大于单节点抓取网页的爬虫系统。

(6)稳定性:基于Hadoop分布式框架,当某—台机器崩溃时,不会影响整个集群的工作,也不会因此而丢失崩溃的机器上的数据。

(7)易操作性:只需将Hadoop集群配置好就可以很轻松地启动爬虫的抓取任务。同时很容易配置爬虫系统的配置文件。 vKaMpGjcK7jFuHAMF0u2nOdnzyxS4POmbZw5zB//op4n1ZomPZzSHbS0fDClsv6j

点击中间区域
呼出菜单
上一章
目录
下一章
×