宽度优先爬虫和带偏好的爬虫

            互联网可以看成一个超级大的“图”,而每个页面可以看成一个“节点”。页面中的链接可以看成是图的“有向边”。因此,能够通过图的遍历得方式对互联网这个超级大“图”进行访问。

            图的遍历可以分为宽度优先遍历和深度优先遍历,但是深度优先遍历可能会在深度上过“深”或者陷入黑洞,大多数爬虫都不采用这种方式。另一方面,在爬取网页的时候,有时候不能完全按照宽度优先遍历的方式,而是给待遍历的网页赋予一定的优先级,根据这个优先级进行遍历,这种方法称为带偏好的遍历。

             整个的宽度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的“子节点”也就是超链接提取出来,放入队列中依次进行抓取。被处理过的链接需要放入一张表中,通常称为visited表。每次新处理一个链接之前,需要查看这个连接是否已经存在于Visited表中。如果存在,证明链接已经处理过,跳过,不作处理,否则进行下一步处理。

           宽度优先遍历是爬虫中使用最广泛的一种爬虫策略,之所以使用宽度优先搜索策略,主要原因有三点:

           1,重要的网页往往离种子比较近。

            2,万维网的实际深度最多能达到17层,但是到大某个网页总存在一条很短的路径,而宽度优先遍历会以最快的速度达到这个网页。

            3,宽度优先有利于多爬虫的合作抓取,多爬虫合作通常先抓取站内链接,抓取的封闭性很强。

带偏好的爬虫:

       有时,在URL队列中选择需要抓取的URL时,不一定按照队列“先进先出”的方式进行选择,而把重要的URL先从队列中挑出来进行抓取,这种策略也称作“页面选择”,这可以使有限的网络资源照顾重要性高的网页。

      判断网页重要性的因素有很多,主要有链接的欢迎度,链接的重要性和平均链接深度,网站质量,历史权重等主要因素。

      如何实现最佳优先爬虫呢,最简单的方式可以使用优先级队列来实现TODO表,并且把每个URL的重要性作为队列元素的优先级。这样每次选出来的扩展的URL就是具有最高重要性的网页。

网络爬虫最关键的数据结构是URL队列,通常我们称之为爬虫队列。之前讲过一直使用内存数据结构,例如链表或者队列来实现URL队列,但是,网络上需要我们抓取的链接成千上万,在一些大型的搜索引擎中,比如百度,和Google,大概都有十几亿的URL需要抓取。因此,内存数据结构并不适合这些应用。最合适的一种方法是使用内存数据库,或者直接使用数据库来存储这些URL。本部分讲解爬虫队列的基本知识,并且介绍一种非常流行的内存数据库

Berkeley DB,最后介绍一个成熟的开源爬虫软件Heritrix是如何实现爬虫队列的。  


宽度优先爬虫和带偏好的爬虫_第1张图片

你可能感兴趣的:(网络爬虫)