2.1.3 Heritrix简介

Heritrix也是一个开源的、使用Java编程语言开发的网络爬虫,始于2003年年初,最初用于对网上的资源进行归档,建立网络数字图书馆。Heritrix可以实现深度复制,用于获取完整的、精确的站点内容,甚至还包括图像及其他非文本内容。可以说,它对任何内容都是“来者不拒”,并且不会对页面内容进行修改。对于相同的URL,即使重新爬行也能不替换先前的内容。爬虫主要通过可视化的Web用户界面启动、监控和调整,允许弹性地定义要获取的网页链接。其中,Heritrix最出色之处在于其良好的可扩展性,方便用户实现自己的抓取逻辑。目前可以在SourceForge开源站点下载其最新版本(http://sourceforge.net/projects/archive-crawler/)。

从核心模块来看,Heritrix主要有以下组件:

  • 爬取范围:通过规则,配置当前应该在什么范围内抓取网页链接。例如,选择BroadScope表示当前的爬取范围不受限制,选择HostScope则表示爬取被限制在当前的同一台主机上,不能爬取其他IP地址的主机。
  • 边界开拓:针对网页URL进行处理,最主要的作用是决定下一个将被处理的URL是什么。这与深度优先、宽度优先这样的获取策略紧密相关。具体的操作包括跟踪哪些URL将被爬取,哪些URL是已经被爬取过的,选择下一个URL,剔除已经处理过的,等等。
  • 处理器链:通过若干处理步骤获取URL,分析结果并将其传回给边界开拓组件。其中有5个子组件可以配置,分别是预处理器、获取器、抽取器、写入器和后处理器。
  • 预取器:做一些准备工作,对抓取的先决条件做判断,是整个处理器链的入口。例如,对处理进行延迟和重新处理、否决随后的操作等。
  • 获取器:主要是获得资源,解析网络传输协议。例如进行DNS转换等,并填写请求和响应的表单。
  • 抽取器:解析获取器返回的内容,抽取感兴趣的部分,包括HTML、CSS、JavaScript等。解析完成后,新发现的网页链接也会被放入待处理列表,等待之后的继续爬取。
  • 写入器:将爬取和抽取到的结果存储到磁盘,可以以压缩和非压缩镜像两种方式进行,压缩更省磁盘空间而非压缩则更省时间。
  • 后处理器:做最后的维护和扫尾工作,如测试解析出的新链接中有哪些是不在爬取范围内的。
  • Web管理控制台:多数是单机的Web应用,通过内嵌Java HTTP服务器来实现展示。
  • 爬虫命令处理:包含足够的信息,用于创建要爬取的URL。
  • 服务器缓存(Servercache):存放服务器的持久化信息,能够被爬行部件随时查阅,例如获取策略、抓取时间、IP地址、历史记录等。

将Heritrix和Nutch做一个简单的对比,我们不难发现二者均为Java开源框架,它们的实现原理也基本一致:先遍历网站的资源,然后将这些资源抓取到本地。使用的方法都是分析网站中每一个有效的URL链接,并提交HTTP请求,从而获得相应的结果,生成本地文件及相应的日志信息等。当然,两者在具体实现和使用上还是有不同之处的:

  • 从功能上看,Nutch紧密集成了Lucene,对于抓取内容的索引和检索是非常方便的。相比之下,使用Heritrix时,用户需要自己负责文件格式的转换、索引和检索等工作。不过,Heritrix网络蜘蛛的功能更为强大,可以专注于网络信息的下载。
  • 从对待爬取内容的处理方式上看,Nutch只获取并保存可索引的内容,且可以对下载内容进行过滤修改,而Heritrix则适用于各种类型的信息,力求保持网页原貌。另外,Nutch一般是通过刷新操作将旧内容替换为新内容的,而Heritrix则是不断追加新内容。
  • 从用户使用来看,Nutch采用命令行运行和控制。而Heritrix有Web控制管理界面,更为人性化一些。Nutch的定制能力不算很强,而Heritrix可控制的参数比较多,只是配置起来有点麻烦。