网络爬虫,又称为Robots,Spiders以及Wanderers,几乎与网络同时出现。
第一个网络爬虫是Matthew Gray的Wanderer,出现于1993的春天。在头两届国际万文网会议上出现过数篇关于网络爬虫的论文。但是那时候互联网上的信息规模比现在要小得多,那些文章中并没有阐述如何处理现在所面临的海量网络信息的技术。每个搜索引擎的后台,都有相应的网络爬虫在工作着。但是出于互相竞争的原因,这些网络爬虫的设计并没有公开,除了以下3 个:Google Crawler,Internet Archive Crawler以及Mercator 。7384
搜索引擎Google中,采用了多台机器进行分布式爬行。它的网络爬虫包括5个功能模块,分别运行在不同的进程中。一个URL Server进程负责从一个 文件里读取URL(Uniform Resource Locator),并把它们分发给多个Crawler进 程。每个Crawler进程运行在不同的机器上,采用单线程和异步I/O同时从近 300个网站上获取数据。所有的Crawler将下载来的数据传输到同一个Store Server进程,它将这些页面压缩并存放在磁盘上。Indexer进程将这些页面从磁 盘上读出,它将URL从HTML页面中抽取出来,并将它们存放在另一个磁盘文 件中。一个URL Resolver进程读取这个存放链接的文件,将其中的相对链接转 化为绝对链接,然后存入一个文件,这个文件供URL Server进程读取。 Internet Archive Crawler也使用多台机器进行爬行 。每个Crawler进程可分 配64个站点同时爬行,并且每个站点最多只分配给一个Crawler来爬行。每个单线程的Crawler进程从磁盘中读取分配给其爬行的站点的种子URL,把它们发送到各自站点的爬行队列中。然后采用异步I/O从这些队列读取链接,下载对应的网页。一旦一个HTML网页下载下来,Crawler就将包含在其中的链接抽取 出来。如果链接指向同一个网站,那就将该链接加入到该站点的队列中;否则,就将该链接存放到磁盘中。一个批处理进程周期地将这些链接进行过滤, 去除重复链接,并把它们放入相应站点的队列中。
Mercator是一个在可扩展性方面做得非常出色的Crawler 。Mercator完全用Java实现。它采用的数据结构可以不管爬行规模的大小,在内存中只占有限的空间。这些数据结构的大部分都在磁盘上,在内存中只存放有限的部分,伸缩性很强。Mercator采用模块化设计的思想,通过替换以及增减模块可以很方便地实现各种功能,如进行各类Web信息统计以及Web快照,体现了良好的可扩展性。Mercator由5个部分构成,分别负责:给即将付诸下载的URL进行排序;将主机名解析为IP地址;使用HTTP协议下载文档;从HTML文档中提取链 接;检测一个URL是否已经遇到过。
一个网络爬虫程序通常网络爬虫从种子URL开始,通过网页内容解析,跟随网页上的超链接进行下载。互联网上的信息更新很快,必须定期更新已经 搜集过的旧信息,避免无效链接,同时获取最新信息。只有高效深度的挖掘才能使搜索引擎提供全面、即时的服务。 网络爬虫研究现状综述:http://www.youerw.com/yanjiu/lunwen_5325.html