现在的位置: 首页 > 综合 > 正文

Labin、OpenSpider、天网 三款爬虫对比分析

2013年10月03日 ⁄ 综合 ⁄ 共 1417字 ⁄ 字号 评论关闭

    Labin、OpenSpider、天网 是三款比较著名的网络爬虫,其中天网现在已经做成了分布式爬虫,据称天网在ftp搜索方面水平比较高。这三款爬虫本人都接触过,对于Labin和天网的源代码也研究过一段时间。、

    Larbin:

    首先,Labin采用的socket方式是 单线程非阻塞式的爬取。具体的技术实现采用 linux/unix的poll轮询接口。当Larbin读取种子网站以后,会解析出网页中的url.从源代码中来看,Larbin提取url的技术水平并不高,只是采取简单的字符串操作。然而url是各种各样的,字符串操作能否提取90%以上html网页中的url,还值得怀疑。

    当被urls被提取以后,Labin建立了四个队列存取之:两个优先权队列、两个普通队列。为什么要这么做呢?我想做着可能这样想:优先权队列用作采集优先权高的url,而这个优先权怎么计算?这个要根据系统的实际情况了!如果是垂直搜索引擎,可能会根据倾向性、内容相关性来打分,分数高则优先级高。甚至会用分类、聚类或者各种评判手段,甚至pagerank/hits 算法来预先计算url的权重。如果是普通搜索引擎,那么可以这样计算打分:要不根据爬取的网页深度,要不根据是否location字段等等。Larbin中优先权是根据什么来计算的,我想读了上面的东西已经不重要了。

    既然提取了urls,就要对url进行域名解析。Larbin自建立了一个DNS服务器。关于DNS服务器的运作,鲜有说明。我自己是这样认为的:首先,本地(Larbin)的dns与外网的DNS进行交互,将外网的DNS的相关内容读取进来。然后,就可以响应larbin的解析请求了。所以当开启DNS服务器的时候,应该会有一个大量读取外网DNS内容的过程。

    Larbin似乎是将解析完毕的DNS存入一个管道之中,一头进,一头出。出的一头就是继续重复爬取了。另外Larbin的url消重算法是采用的是普通的bloom filter算法。不在累赘了。

 

   总结:从上面看来,Larbin只是一个小型架构的爬虫,并不适合大型分布式爬取。其架构针对小型爬虫来说,轻装上阵,非常合理。但是对于大型爬虫则是非常的不合理了。

 

   OpenSpider:

   OpenSpider我并没细看,大体上也就是那么个流程。不过值得一提的是,OpenSpider提取urls采用的是正则表达式的方法。这个是值得大书特书的。

   关于正则表达式的具体设计,需要丰富的工程项目经验。其设计非常复杂。

 

   天网:

   天网的初期版本在这三个爬虫之中是最差劲的。几乎毫无架构可言。不过凡事都是从低级做起,还是要大书一番。勇气可嘉么。

  

   看得出来,天网模仿了很多开源系统。譬如一个http的简单读取器,还有Larbin似乎也看到了模仿的影子。低等科技国家只能够从模仿开始。一味鼓吹创新只能是自欺欺人。

    天网开了几个线程,并行进行爬取。爬取流程大约如下:

   

 

  

    足见,天网将爬来的并解析的url直接放在了map,vector等容器中,消重也是简单的MD5匹配。同时也设置了一个已爬取的容器。socket采用的是非阻塞的select。但是我怀疑他们的select没有起作用。用法等于没有用。

   以上是我对三款爬虫的简要分析。因为没有必要进行非常细致的抠,所以很多地方都是一笔带过。谬误之处肯定很多的,希望大家多指教。

 

抱歉!评论已关闭.