python爬⾍国内外研究现状
作为搜索引擎技术核⼼元素之⼀,⾃1993年初 Matthew Gray’s Wandered 在⿇省理⼯学院开发出有史记载的第⼀个爬⾍以来,爬⾍技术历经20多年的发展,技术已⽇趋多样。为满⾜不同⽤户多种多样的需求,创建开发了类型众多的爬⾍。按照实现技术和其系统构成,爬⾍系统主要可以分为以下⼏种:
1.通⽤⽹络爬⾍
通⽤⽹络爬⾍(General Purpose Web Crawler)也可称之为全站爬⾍(Scalable Web Crawler),它通过⼀系列预设的初始链接开始,获取页⾯上所有链接,根据预设规则,提取链接,进⼊待爬取队列,进⽽不断访问⽹页下载⽹页或取链接。然后通过HTML解析技术,获取页⾯数据,提取所需信息并保存,与此同时将新获取的链接放⼊待爬取队列,直到达到系统预设指定条件为⽌。通⽤⽹络爬⾍有两种常⽤的爬取策略:
(1)深度优先策略(Depth first strategy):
这个是在爬⾍发展早期使⽤⽐较多的⽅法。这种策略最终要达到的效果是⼀直搜索到由站点分布抽象出来的树的叶⼦节点(即⽹页站点的最底层不包含任何其他不重复的⽹页链接的⽹页) 。在⼀个⽹页⽂件中,当爬⾍获得当前⽹页中的第⼀个链接后,就对该链接所指向的⽹页⽂件执⾏深度优先搜索策略,也
就是说在搜索当前页⾯的其他的链结结果之前,必须先搜索出⼀条路径使其形成⼀条独⽴的完整的链。形象点说深度优先搜索策略就是沿着该⽹页解析出的HTML⽂件的⼀个链接转接到另⼀个链接从⽽由链接组成的链接⽹络⼀直⾛到不能更加深⼊为⽌,然后返回到之前所在的某⼀个⽹页⽂件中,再继续选择该⽹页⽂件中的下⼀个不重复的链接,重复上述动作。当初始⽹页中不再存在其他链接可供选择时,说明此次搜索已经结束。但如果所需爬取⽹页节点结构⽐较深时的时候,该策略会引起较⼤的资源浪费,爬取效率也不太⾼。
(2)⼴度优先策略(Breadth first strategy):
简称BFS,⼜称之为宽度优先搜索策略,或横向优先搜索策略,作为⼀种图形搜索算法提出来,其思想亦可⽤于⽹络爬⾍的设计。简单的说,⼴度优先搜索策略是从树根节点开始,沿着树的宽度遍历树在同⼀层的节点。如果该树的所有节点均被访问,则算法结束。⼴度优先搜索策略的实现⼀般采⽤open-closed表。⼴度优先搜索策略先将所需爬取⽹页的站点按照页⾯结构划分成不同的层次,然后沿着划分好的层次⼀层⼀层的由上到下进⾏爬取。先爬取浅层次的链接,将处于同⼀层次的所有⽹页处理完成之后再向下⼀个层次继续爬取。⼴度优先策略可以以并发的⽅式进⾏爬取,由于程序并发会提⾼程序的⼯作效率,所以这种特性在⼀定程度上可以提⾼爬⾍的爬取效率,⽽且同时也可以任意控制爬⾍爬取⽹站站点的深度,从⽽避免了使⽤深度优先策略是爬⾍陷⼊⽆穷深度从⽽导致爬⾍不能正常结束的状态。
利⽤通⽤爬⾍策略实现爬⾍算法的Google crawl爬取⽬前存在于互联⽹上所有⽹站⽹页,⾕歌公司通过建⽴分布式系统⽹络加上异步输⼊输出的技术来⽤以提⾼整个爬⾍系统的并发度,期间还使⽤了包括PageRank算法在内的众多提升系统运⾏效率的算法来优化Google crawl 爬⾍的爬取性能。
###2.增量⽹络爬⾍
爬虫可以干什么增量⽹络爬⾍(Incremental Web Crawler)是⼀种根据不同同⼀⽹站上不同页⾯更新的频率的不同来对应不同的策略的爬取策略,是⼀种对已经爬取过的页⾯在数据存储中采取增量式的更新的策略,也就是说这种爬⾍策略只会爬取当前新出现页⾯的数据和页⾯产⽣更新的数据。增量更新的策略相对于优先策略来说其不会出现⼤量重复爬取页⾯的情况,避免不能充分利⽤硬件或⽹络等资源,最终导致整个系统使⽤效率低下的情况的发⽣。