自己动手写网络爬虫(修订版)
上QQ阅读APP看书,第一时间看更新

本章小结

本章介绍了爬虫的基本原理及开源爬虫实现Heritrix。下面再介绍几个相关的爬虫项目,供读者参考。

● RBSE是第一个发布的爬虫,它有两个基础程序。第一个程序“spider”,抓取队列中的内容到一个关系数据库中;第二个程序“mite”,是一个修改后的WWW的ASCII浏览器,负责从网络上下载页面。

● WebCrawler是第一个公开可用的用来建立全文索引的一个子程序,它使用WWW库下载页面,使用宽度优先算法来解析获得的URL并对其进行排序,包括一个根据选定文本和查询相似程度爬行的实时爬虫。

● World Wide Web Worm是一个用来为文件建立包括标题和URL简单索引的爬虫。索引可以通过grep式的UNIX命令来搜索。

● CobWeb使用一个中央“调度者”和一系列的“分布式的搜集者”的爬虫框架。搜集者解析下载的页面并把找到的URL发送给调度者,然后调度者反过来分配给搜集者。调度者使用深度优先策略,并且使用平衡礼貌策略来避免服务器超载。爬虫是使用Perl语言编写的。

● Mercator是一个分布式的、模块化的使用Java语言编写的网络爬虫,它的模块化源自于使用可互换的“协议模块”和“处理模块”。协议模块负责怎样获取网页(例如使用HTTP),处理模块负责怎样处理页面。标准处理模块仅仅包括解析页面和抽取URL,其他处理模块可以用来检索文本页面,或者搜集网络数据。

● WebFountain是一个与Mercator类似的分布式的模块化的爬虫,它是使用C++语言编写的。其特点是一个管理员机器控制一系列的蚂蚁机器。经过多次下载页面后,页面的变化率可以推测出来。这时,一个非线性的方法必须用于求解方程以获得一个最大的新鲜度的访问策略。作者推荐在早期检索阶段使用这个爬虫,然后用统一策略检索,就是所有页面都使用相同的频率访问。

● PolyBot是一个使用C++和Python语言编写的分布式网络爬虫。它由一个爬虫管理者、一个或多个下载者和一个或多个DNS解析者组成。抽取到的URL被添加到硬盘的一个队列里面,然后使用批处理的模式处理这些URL。

● WebRACE是一个使用Java实现的拥有检索模块和缓存模块的爬虫,它是一个很通用的称作eRACE系统的一部分。系统从用户方得到下载页面的请求,爬虫的行为有点像一个聪明的代理服务器。系统还监视订阅网页的请求,当网页发生改变的时候,它必须使爬虫下载更新这个页面并且通知订阅者。WebRACE最大的特色是,当大多数爬虫都从一组URL开始的时候,WebRACE可以连续地接收初始抓取的URL地址。

● Ubicrawer是一个使用Java语言编写的分布式爬虫。它没有中央程序,而由一组完全相同的代理组成,分配功能通过主机前后一致的散列计算进行。这里没有重复的页面,除非爬虫崩溃了(另外一个代理就会接替崩溃的代理重新开始抓取)。爬虫设计为高伸缩性。

● FAST Crawler是一个分布式的爬虫,在Fast Search & Transfer中使用。节点之间只交换发现的链接。在抓取任务分配上,静态的映射超链接到爬虫机器,实现了增量式抓取,优先抓取更活跃的网页。

● Labrador是一个工作在开源项目Terrier Search Engine上的非开源的爬虫。

● TeezirCrawler是一个非开源的可伸缩的网页抓取器,在Teezir上使用。该程序被设计为一个完整的可以处理各种类型网页的爬虫,包括各种JavaScript和HTML文档。爬虫既支持主题检索也支持非主题检索。

● Spinn3r是一个通过博客构建Tailrank.com反馈信息的爬虫。Spinn3r是基于Java的,它的大部分体系结构都是开源的。

● HotCrawler是一个使用C和PHP语言编写的爬虫。

● ViREL Microformats Crawler搜索公众信息作为嵌入网页的一小部分。

开源爬虫除了已经分析过的Heritrix,还有下面一些。

● DataparkSearch是一个在GNU GPL许可下发布的爬虫搜索引擎。

● GNU Wget是一个在GPL许可下,使用C语言编写的命令行式的爬虫。它主要用于网络服务器和FTP服务器的镜像。

● Ht://Dig在它和索引引擎中包括了一个网页爬虫。

● HTTrack用网络爬虫创建网络站点镜像,以便离线观看。它使用C语言编写,在GPL许可下发行。

● ICDL Crawler是一个用C++语言编写、跨平台的网络爬虫。它仅仅使用空闲的CPU资源,在ICDL标准上抓取整个站点。

● JSpider是一个在GPL许可下发行的高度可配置并可定制的网络爬虫引擎。

● Larbin是由Sebastien Ailleret开发的C++语言实现的爬虫。

● Webtools4larbin是由Andreas Beder开发的。

● Methabot是一个使用C语言编写的高速优化的、使用命令行方式运行的、在2-clause BSD许可下发布的网页检索器。它的主要特性是高可配置性、模块化;它检索的目标可以是本地文件系统、HTTP或者FTP。

● Nutch是一个使用Java编写的在Apache许可下发行的爬虫。它可以用来连接Lucene的全文检索套件。

● Pavuk是一个在GPL许可下发行的、使用命令行的Web站点镜像工具,可以选择使用X11的图形界面。与GNU Wget和HTTrack相比,它有一系列先进的特性,如以正则表达式为基础的文件过滤规则和文件创建规则。

● WebVac是斯坦福WebBase项目使用的一个爬虫。

● WebSPHINX是一个由Java类库构成的基于文本的搜索引擎。它使用多线程进行网页检索和HTML解析,拥有一个图形用户界面,用来设置开始的种子URL和抽取下载的数据。

● WIRE-网络信息检索环境是一个使用C++语言编写的在GPL许可下发行的爬虫,内置了几种页面下载安排的策略,还有一个生成报告和统计资料的模块。它主要用于网络特征的描述。

● LWP:RobotUA是一个在Perl 5许可下发行的可以优异地完成并行任务的Perl类库构成的爬虫。

● Web Crawler是一个用C#语言编写的开放源代码的网络检索器。

● Sherlock Holmes用于收集和检索本地及网络上的文本类数据(文本文件、网页),该项目由捷克门户网站中枢(Czech web portal Centrum)赞助并且在该网站使用;它同时也在Onet.pl中使用。

● YaCy是一个基于P2P网络的免费的分布式搜索引擎。

● Ruya是一个在宽度优先方面表现优秀,基于等级抓取的开放源代码的网络爬虫。其在英语和日语页面抓取方面表现良好,在GPL许可下发行,并且完全使用Python语言编写。

● Universal Information Crawler是快速发展的网络爬虫,用于检索、存储和分析数据。

● Agent Kernel是一个当爬虫抓取时,用来进行安排、并发和存储的Java框架。

Arachnod.net是一个使用C#语言编写,需要SQL Server 2005支持的,在GPL许可下发行的多功能的开源的机器人。它可以用来下载、检索和存储包括电子邮件地址、文件、超链接、图片和网页在内的各种数据。

● Dine是一个多线程Java的HTTP客户端。它可以在LGPL许可下进行二次开发。

● JoBo是一个用于下载整个Web站点的简单工具,它采用Java实现。JoBo直接使用Socket下载网页。与其他下载工具相比较,它的主要优势是能够自动填充form(如自动登录)和使用Cookies来处理session。JoBo还有灵活的下载规则,如通过网页的URL、大小、MIME类型等来限制下载。

虽然有这么多公开的资源可用,但是,很多企业和个人还在不断地开发新的爬虫,尤其是主题爬虫。互联网发展过程中出现了一波又一波的新技术,而且每一波都有开发爬虫的需要。现在实时搜索又成了热门,可能会需要实时爬虫。下一步如果语义网络真正发展起来了,还会需要语义搜索爬虫。