`

[转载]heritrix 增量抓取

 
阅读更多

[转载]http://blog.csdn.net/historyasamirror/article/details/6706174

 

虽然打着Heritrix的名头,但本文更多的还是谈谈增量抓取的基本思想,Heritrix只是正好被用来做为例子。

 

如果你不是随便写个爬虫抓着玩,那么一定会碰到一个问题,就是增量抓取。不管是百度,google这样的广泛搜索引擎,还是现在很火的垂直搜索,增量抓取一定都是做爬虫的最需要考虑的问题。
之所以需要增量抓取的原因,有两个:
1. 网站总是在不断的发生着变化。或者添加了新的网页,或者旧的网页内容发生了变化;
2. 并没有机制能够将网站发生的变化主动的推送给搜索引擎,如果有这种机制,一切都将变得简单,也就不需要爬虫去做增量抓取;

增量抓取的目的就在于尽可能快的抓取到变化了的网页(包括新增的和发生变化的旧的网页):
之所以需要尽可能的快,是因为这直接关系到搜索引擎提供的信息的时效性。假设一个网页发生了变化,而爬虫一个月之后才重新重新抓取,那么意味着搜索引擎内关于这个网页的信息在这一个月之内都是过时的;
之所以是尽可能的快,是因为爬虫的增量抓取这种方式永远都不可能保证一定能够及时发现变化的网页。哪怕重复抓取的频率很快,也不能避免网页在两次抓取之间发生了变化。如果希望达到实时性,就只能通过接口调用。比如google为了实时搜索twitter的信息,购买了twitter的数据,twitter只要产生新的数据就会推送给google;再比如我之前听过一个“去哪儿”的讲座,为了保证搜索到的机票价格一定是最及时的,在每次搜索的时候,都实时的调用航空公司的接口实时的获取机票价格,这是一个典型的牺牲服务的响应速度而保证信息时效性的例子(几年前听说的,不确定还是这么做...);

根据前述,构建一个增量抓取的爬虫主要有两个要素:
1. 如何能够尽可能快;
2. 怎样判断网页发生了变化;

先说第一点。如果是抓取特定的网站,那么可以引入一些先验知识。比如,网站的索引页总是能够关联上哪些新增加的网页,一个网站的变化频率也可以简单的估计。通过引入这些知识,爬虫可以很容易的很快的找到那些可能发生变化的网页。而对于像百度这样的搜索引擎,因为需要抓取所有的网页,它不太可能去一一分辨每个网站的索引页,这种情况下,就必须有动态学习和调节网站抓取频率的机制,对于那些变化快的网站/网页,重复抓取的频率就应该高,而那些几乎不变化的网页,重复抓取的间隔就可以很长。
关于第二点,看上去似乎很简单,只需要字符串比较一下新的网页和上次抓取的版本是否发生了变化。但是在很多情况下,网页的字符可能发生了微小的变化,但并不意味着网页的实质内容发生了变化。举例来说,网页上有个地方写着系统的当前时间,这意味着每次查看该网页时间都会变,但是,网页的真正内容可能从未发生过变化。如何过滤这些信息而能够判断网页内容的真实变化并不是一件容易的事。

说了这么多干巴巴的东西,还是看看Heritrix怎么做的吧。
(以下的内容需要对Heritrix的架构和模块有一个基本的了解)

为了实现Heritrix的增量抓取功能,需要在Processing Chains中添加几个新的组件,如下图:

在Extractor Processing Chain的最前端,加入一个新的模块:HttpContentDigest,这个模块会对有Fetch Processing Chain抓取下来的网页产生一个摘要,这个摘要就是为了判断网页是否发生了变化,这个摘要的产生必须要考虑到我们之前提到过的网页的细节发生变化,但是内容无变化的这种情况;

HttpContentDigest之后会有一个ChangeEvaluator的模块,这个模块根据HttpContentDigest产生的新的网页摘要以及上一次抓取生成的旧的摘要的对比,判断网页是否发生了变化;

在Post Processing Chain中会加入一个WaitEvaluator,这个模块的作用,是根据ChangeEvaluator的结果动态的调节该网页的抓取频率,并给出该网页下一次的抓取时间。还是举例说,比如这个url之前的抓取频率是1天,意味着1天重复抓取一次。如果ChangeEvaluator判断本次抓取网页的内容发生了变化,那么WaitEvaluator会将该url的抓取频率设置为 1天 / 2 = 12小时,意味着它的抓取频率需要更快;如果网页内容没有发生变化,那么新的抓取间隔会被设置为 1天 * 2 = 2天。

其本质就是根据网页抓取后内容是否变化来动态调节抓取频率。

此外,Heritrix的Froniter也需要改成AdaptiveRevisitFrontier。Heritrix默认的Froniter内部是一个FIFO的队列,而AdaptiveRevisitFrontier内部则是一个优先级队列。它根据WaitEvaluator设定的wait time(也就是抓取间隔)来排列url,判断哪个url应该被调度。

(注:AdaptiveRevisitFrontier是一个实验性质的Froniter: EXPERIMENTAL Frontier that will repeatedly visit all encountered URIs. Wait time between visits is configurable and is determined by seperate Processor(s). See WaitEvaluators See documentation for ARFrontier limitations.)

 

Reference

1. Incremental crawling with Heritrix

分享到:
评论

相关推荐

    heritrix抓取指南

    heritrix抓取指南heritrix抓取指南 heritrix抓取指南

    heritrix抓取的操作和扩展

    对heritrix抓取的操作和扩展 里面有MirrorWriterProcessor扩展的类文件修改

    web爬虫Heritrix.zip

    Heritrix是按多线程方式抓取的爬虫,主线程把任务分配给Teo线程(处理线程),每个Teo线程每次处理一个URL。Teo线程对每个URL执行一遍URL处理器链。URL处理器链包括如下5个处理步骤。整个流程都在图2.1中。 (1)预取链...

    Heritrix3手册翻译

    Heritrix User Manual https://webarchive.jira.com/wiki/display/Heritrix/Heritrix3 Heritrix3(或简称H3)指Heritrix的3.0发布。 目前官方的Heritrix 3.0.0版已经发布(2009年12月)。 后续的发行H3将是3.0.1...

    heritrix正确完整的配置heritrix正确完整的配置

    heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置

    Heritrix部署直接能运行的项目

    Heritrix是IA的开放源代码,可扩展的,基于整个Web的,归档网络爬虫工程 Heritrix工程始于2003年初,IA的目的是开发一个特殊的爬虫,对网上的 资源进行归档,建立网络数字图书馆,在过去的6年里,IA已经建立了400...

    Heritrix安装详细过程

    按照这个步骤安装绝对会让你安装成功的。步骤非常的清晰。Heritrix是一个不错的选择。网络爬虫,更快更好的帮你捕捉到你想要的网页

    heritrix 配置

    Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。本文详细介绍了 Heritrix 在 Eclipse 中的配置、运行。

    网络爬虫Heritrix1.14.4可直接用

    在/Heritrix1/src/org/archive/crawler/Heritrix.java启动之后,访问https://localhost:8089登录admin密码admin直接用

    heritrix系统使用.ppt

    heritrix系统使用、一个ppt 介绍heritrix的基本概念、以及原理知识

    Heritrix(windows版)

    包含: heritrix-3.1.0-dist.zip heritrix-3.1.0-src.zip 官网下载地址。

    heritrix-3.4.0-SNAPSHOT-src.zip

    Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。官网下载好像要翻墙,我下下来方便大家使用,这是3.4版本,配合heritrix-3.4.0-SNAPSHOT-dist.zip使用

    heritrix网络爬虫

    Heritrix是一个开源,可扩展的web爬虫项目。用户可以使用它来从网上抓取想要的资源。Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取...

    Heritrix爬虫框架 完整版

    Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑

    Heritrix—开发自己的搜索引擎

    开发自己的搜索引擎,Heritrix是一种网页抓取的有效工具

    heritrix1.14.4源码包

    heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...

    heritrix-3.1.0 最新jar包

    heritrix-3.1.0 最新官网jar包。包括heritrix-3.1.0-dist.zip包与heritrix-3.1.0-src.zip包。是爬虫神器

    Heritrix使用详解与高级开发应用

    Heritrix使用详解与高级开发应用 Heritrix开发应用详细

    heritrix源码

    heritrix学习源码和资料

    heritrix1.14.0jar包

    爬虫时我们会使用heritrix,搭建工程时要导入这些jar包,该jar包是1.14.0版本的。

Global site tag (gtag.js) - Google Analytics