`
lsh2366254
  • 浏览: 38968 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Heritrix配置及扩展

阅读更多
二、Heritrix功能概要
Heritrix做为一个爬虫框架,它抽像并实现了一组爬虫的基础组件,不同类型的使用者可以替换不同的组件来实现期望的功能,如最大利用带去镜像站点、集中搜索特定主题、对已爬过的网页持续更新等,甚至可以加入不同的协议。

1.Heritrix的主要组件
概括的说,herittrix有三大组件:
范围组件(Scope):范围组件是一组DecideRule对象按指定先后顺序组装起来的决策链,边界组件通过它来决定将哪些/个URI放入爬取调度队列;
边界组件(Frontier):边界组件通过范围组件或一组范围组件跟踪哪些URI将被爬取收集,以及将已经爬取的URI页面内的外链(outlinks)再次放入爬取调度队列,并将已经爬取过的URI剔除。
爬取组件(FetchChain):爬取组件是从网络上获取资源的关键组件,它包含了若干Processor对象,获取URI内容、分析外链,并将结果传给边界组件,实现递归爬取。

除了上述三大组件以外,Heritrix还有WEB管理、统计信息收集、定时备份、性能配置管理、增量更新等组件或小组件。


2.Heritrix的主要执行流程
上文说过,heritrix爬取过程是一个递归过程,整个过程主要有以下同个步骤:
从待爬取队列中获取一个URI
爬取URI内容
分析URI外链、归档URI内容
分析URI的外链,将符合范围组件定义通过边界组件签定的URI重新加入队列
标记已经处理过的URI




3.Heritrix的任务配置
创建Heritrix爬取任务后,主导任务爬取过程的是一个叫crawler-beans.cxml的配置文件,它实际上的一个Spring管理bean的配置文件。下面是这个配置文件中一些bean的简要说明:

范围
在Heritrix中,范围(scope)可以由一组接近40个可配置的DecideRule组成决策链,以下所列是Heritrix的默认最小配置中的scope
org.archive.modules.deciderules.RejectDecideRule
ban掉所有,默认REJECT

org.archive.modules.deciderules.surt.SurtPrefixedDecideRule
通过Host白名单,决策由decision设定,默认ACCEPT

org.archive.modules.deciderules.TooManyHopsDecideRule
ban掉跃点大于指定值,默认REJECT

org.archive.modules.deciderules.TransclusionDecideRule
通过所有嵌入链接(嵌入深度小于设定),,默认ACCEPT

org.archive.modules.deciderules.surt.SurtPrefixedDecideRule
通过Host,指定黑,决策由decision设定,默认REJECT

org.archive.modules.deciderules.MatchesFilePatternDecideRule
通过资源名,指定黑/白名单,决策由decision设定

org.archive.modules.deciderules.PathologicalPathDecideRule
ban掉路径重复超过阈值的,如http://www.sina.com.cn/2/2/2/some.html

org.archive.modules.deciderules.TooManyPathSegmentsDecideRule
ban掉路径深度超过阈值的,如http://www.sina.com.cn/1/2/3/4/5/some.html

org.archive.modules.deciderules.PrerequisiteAcceptDecideRule
通过所有有先决条件的url,比如种子或种子的重定向,dns

org.archive.modules.deciderules.SchemeNotInSetDecideRule
ban掉不支持的协议

以上所列DecideRules只是Hertitrix提供的一小部分,但它已足以支持很多常见的爬取工作了。要注意的是, 合的Reject和accept顺序是整个决策链正常工作的保证。再则,如果要爬取指定主题的页面,关键是对对应的DecideRules配置更详细的规则。

边界
org.archive.crawler.frontier.BdbFrontier
维护一个爬取任务的内部状态,包括:
总共发现了有多少URI
多少URI正在爬
已经爬了多少URI
URI的爬取先后顺序


org.archive.crawler.postprocessor.CandidatesProcessor
分析URI外链,将通过范围的URI再次加入到队列中。

org.archive.crawler.prefetch.CandidateScoper
通过前面的scope,判断一个抓取页面内的链接是否加入调度队列

org.archive.crawler.prefetch.FrontierPreparer
设置调度优先级,规范url,计算cost
FrontierPreparer有一个关键配置项preferenceDepthHops,它控制着爬取任务过程中,是采取深度优先,还是广度优先,默认-1是广度优先,0是深度优先,大于零的值,是从种子过来的第几层URI优先。
为避免个人理解错误,原文如下:

/**
     * Number of hops (of any sort) from a seed up to which a URI has higher
     * priority scheduling than any remaining seed. For example, if set to 1
     * items one hop (link, embed, redirect, etc.) away from a seed will be
     * scheduled with HIGH priority. If set to -1, no preferencing will occur,
     * and a breadth-first search with seeds processed before discovered links
     * will proceed. If set to zero, a purely depth-first search will proceed,
     * with all discovered links processed before remaining seeds. Seed
     * redirects are treated as one hop from a seed.
     */
org.archive.crawler.postprocessor.DispositionProcessor
更新server的robot信息,设置URL的调度时机


爬取链

org.archive.crawler.prefetch.Preselector
预先处理URL看其是否要继续处理,通过这个可以过滤一部分或者全部URL

org.archive.crawler.prefetch.PreconditionEnforcer
先处理一些先要处理的URL条件,这里主要是该URL的DNS解析
1 先查看该URL是否有先决条件URL要处理,如果有的话先将该URL的先决   条件URL放入调度器,而该URL将跳过PreconditionEnforcer处理器
2 如果以上该URL没有先决条件URL要处理,则运行以下环节:
    i)先验证该URL的schema,如果不是http或者https则退出该处理器
    ii)如果以上验证该shema是http或者https,则先验证该URL是否可以通   过爬虫协议,如果没有通过爬虫协议则退出本处理器,反之则验证该   URL自身是否是先决条件以及是否通过登录凭证,如果该URL自身不    是先决条件URL并且没有通过登录凭证则也退出本处理器

org.archive.modules.fetcher.FetchDNS
1 首先获取该URL的DNS名字,然后通过DNS名字从缓存中获取CrawlHost
2 验证该URL的DNS名字是否通过第四代IP命名,如果不通过则退出本处 理器
3 如果以上通过,则开始获取DNS数据,同时记录开始获取以及成功获取时 间,最后将DNS数据保存在本地文件(scratch文件)以及更新该URL状态 以及该URL的CrawlHost的IP、时间等数据

org.archive.modules.fetcher.FetchHTTP
1 获取HTTP数据的前提是,该URL的schema为http或者https以及该URL 所属的DNS数据已经获取,如果两者不具备则跳出本处理器
2 如果以上通过,则统计这个处理器处理的URL个数,以及开始获取HTTP 内容

org.archive.modules.extractor.ExtractorHTTP
org.archive.modules.extractor.ExtractorHTML
org.archive.modules.extractor.ExtractorCSS
org.archive.modules.extractor.ExtractorJS
org.archive.modules.extractor.ExtractorSWF
这里主要是通过正则表达式从网页文本内容中抽取出URL,主要是 ExtractorHTML类
在URL抽取过程中,会用到LinksScoper 链接接范围验证处理器,主要验证该URL抽取出来的链接是否在范围
    1)  先验证该URL是否有先决条件URL要先处理,有的话先验证该先决条件URL是否在范围同时退出该处理器
    2) 如果以上没有先决条件URL要先处理,则获取该URL抽取到的链接,然后循环验证每个链接是否在范围,不在范围则过滤掉


org.archive.modules.writer.WARCWriterProcessor
主要将从FetchHttp里获取的网页内容写入本机,以WARC格式
org.archive.modules.writer.MirrorWriterProcessor
主要将从FetchHttp里获取的网页内容写入本机,以原网站镜像方式

org.archive.modules.DispositionChain
分析URI信息,回传结果到边界组件,通过调度处理器,将URL放入调度中心,以便接下来可以抓取
1 先验证该URL是否有先决条件URL要先处理,有的话则将该先决条件URL 放入调度中心,同时退出该处理器
2 如果以上该URL没有先决条件URL要处理,则获取该URL抽取到的所有 链接,循环将他们放入调度中心,以便下次可以抓取


4.Heritrix生死
上文讲了三大组件各自的功能和配置要点,要让Heritrix的抓取任务正确的跑起来,就需要Heritrix的管理中枢出场了。CrawlController可以说是Heritrix的大脑,在Heritrix中拥有无上的权利!借助它可以控制Heritrix的启动、暂停、停止,也定时进行数据统计、数据汇报和文件管理。
Controller作为上述组件的协调者,很多组件之间的互相访问都是通过Controller完成的。

org.archive.crawler.framework.CrawlLimitEnforcer
通过监听StatisticsTracker发出的StatSnapshotEvent事件,判断当前抓取任务的是否达到全局终止限制,并停止抓取任务的运行。

org.archive.crawler.framework.CheckpointService
可以设置抓取过程的备份还原点,通过更改<property name="checkpointIntervalMinutes" value="-1"/>设置定时备份间隔。

避免故障恢复后的重复抓取,可通过Frontier的recoveryLogEnabled=true,从日志文件"frontier.recover.gz"导入已抓取列表。

三、对Heritrix的扩展
Heritrix作为一个完善的web抓取框架,全站dump功能已经很完善,对于有害项目的应用,我们还要扩展/增强以下的功能:
1.增量更新

CrawlURI有一字段rescheduleTime用来指示Frontier该URI会再次被抓取的延时时间,Frontier在调度此URI的时候,会将有延时的URI放入StoredSortedMap<Long, CrawlURI> futureUris中,当从工作线程尝试从Frontier获取下一抓取URI时,达到定时时间的URI会被再次放入工作队列。

org.archive.crawler.postprocessor.ReschedulingProcessor对象可以配置在DispositionChain后,用以指示URI增量更新的延时时间。
但是更多的,ReschedulingProcessor只是我们实现增量更新的示例性代码,更多的增量更新逻辑,需要根据业务需要开发支持更多复杂规则的组件。

2.垂直抓取
从Heritrix的三大组件、抓取处理我们都已经看得出,Heritrix已经为支持垂直抓取做了很大努力。
对于复杂的垂直抓取规则,可以从scope的DecideRule和DispositionChain的Processor入手,Heritrix提供的DecideRule基本上都直接通过正则或变量表达式判断一个CrawlURI是否符合条件,组合条件的DecideRule需要定制。
对于明显的需要在某种页面终止深度抓取的要求,需要在DispositionChain上设置定制的Processor,适时的跳出递归处理链。


四、附注
1.Heritirx的基本运行参数
运行脚本heritrix -a admin:admin
访问https://localhost:8443,用户名跟密码就是以上输入的admin:admin

2.队列分配策略
<!-- QUEUE ASSIGNMENT POLICY -->
<!--
<bean id="queueAssignmentPolicy"
   class="org.archive.crawler.frontier.SurtAuthorityQueueAssignmentPolicy">
  <property name="forceQueueAssignment" value="" />
  <property name="deferToPrevious" value="true" />
  <property name="parallelQueues" value="1" />
</bean>
-->

Heritrix默认是将CrawlURI的Host作为该URI的队列名称,就是同一域名下的URI在同一个队列内,虽然这样做可以统一所有该域下的规则,但是由于一个队列同时只能在一个线程内活动,就会造成同一域名下的URI是串行抓取的。

HostnameQueueAssignmentPolicy


IPQueueAssignmentPolicy


AssignmentLevelSurtQueueAssignmentPolicy


3.种子的加载方式
直接载入
<bean id="seeds" class="org.archive.modules.seeds.TextSeedModule">
     <property name="textSource">
          <bean class="org.archive.spring.ConfigString">
               <property name="value">
                    <value>
                   
                    </value>
               </property>
          </bean>
     </property>
     <!--  <property name='sourceTagSeeds' value='false'/>  -->
     <!--
      <property name='blockAwaitingSeedLines' value='-1'/>
     -->
</bean>

通过seeds.txt载入
<bean id="seeds" class="org.archive.modules.seeds.TextSeedModule">
  <property name="textSource">
   <bean class="org.archive.spring.ConfigFile">
    <property name="path" value="seeds.txt" />
   </bean>
  </property>
  <property name='sourceTagSeeds' value='false'/>
  <property name='blockAwaitingSeedLines' value='-1'/>
</bean>

通过ActionDirectory动态载入(注意是动态,你随时可以载入)
<bean class="org.archive.crawler.framework.ActionDirectory">  
<property name="actionDir" value="action" />  
<property name="initialDelaySeconds" value="10" />  
<property name="delaySeconds" value="30" />  
</bean> 

实现SeedModule接口,完全自定义

4.在Prefetcher中取消robots.txt的限制
在Heritrix中,对robots.txt文件的处理是处于PreconditionEnforcer这个Processor中的。PreconditionEnforcer是一个Prefetcher,当处理时,总是需要考虑一下当前这个链接是否有什么先决条件要先被满足的,而对robots.txt的访问则正好是其中之一。在PreconditionEnforcer中,有一个private类型的方法,方法为:
private boolean considerRobotsPreconditions(CrawlURI curi)
该方法的含义为:在进行对参数所表示的链接的抓取前,看一下是否存在一个由robots.txt所决定的先决条件。很显然,如果对每个链接都有这样的处理。那么,很有可能导致整个抓取任务的失败。因此,需要对它进行调整。这个方法返回true时的含义为需要考虑robots.txt文件,返回false时则表示不需要考虑robots.txt文件,可以继续将链接传递给后面的处理器。所以,最简单的修改办法就是将这个方法整个注释掉,只留下一个false的返回值。
  • 大小: 18.5 KB
分享到:
评论

相关推荐

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

    Heritrix是一款开源的网络爬虫工具,由互联网档案馆(Internet Archive)开发,用于...同时,文档阅读和社区交流也是学习Heritrix配置的重要途径。记得在实践中不断测试和完善配置,以实现高效、可控的网络爬取任务。

    heritrix抓取的操作和扩展

    通过调整配置和扩展,Heritrix可以适应各种复杂的抓取场景,提供稳定且灵活的服务。然而,由于其丰富的配置选项和复杂的架构,对于新手来说,学习和掌握Heritrix可能需要一定的时间。因此,深入理解Heritrix的工作...

    配置Heritrix及常见问题解决

    它提供了高度可配置性和扩展性,使得用户可以根据需求定制爬虫行为。在配置Heritrix时,我们需要理解其核心概念,如工作流、存档项和处理器。 1. **工作流(Workflow)**: Heritrix的工作流定义了爬虫如何处理每...

    Heritrix的安装与配置

    选择源代码版本的原因在于可能需要对Heritrix进行自定义扩展以满足特定需求。下载完成后,解压缩文件,你会看到两个主要的文件夹:`lib`和`src`。 `lib`文件夹包含了Heritrix运行所需的第三方类库,这些.jar文件...

    Heritrix配置简介

    总的来说,Heritrix是一个强大的网络爬虫框架,提供了丰富的配置选项和扩展能力,适用于各种规模的网络数据抓取项目。通过学习和掌握Heritrix的配置和使用,开发者能够高效地从互联网获取并处理大量信息。

    Heritrix3-可扩展web级别的Java爬虫项目

    Heritrix3是一款高度可扩展的Java爬虫项目,专为大规模Web抓取设计,用于构建数字档案馆和网络存档。它是一个开源工具,由Internet Archive维护,旨在收集、保存并提供对互联网上的网页和其他资源的访问。Heritrix3...

    扩展Heritrix3指定内容提取.pdf

    3. Heritrix3的扩展接口:Heritrix3提供了一套可扩展的接口,允许用户通过修改配置文件来添加自定义的内容提取模块。 4. FetchChain的工作机制:FetchChain是Heritrix3中的一个关键组件,负责执行一系列抓取和链接...

    Heritrix安装详细过程

    ### Heritrix安装详细过程及配置指南 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,被广泛应用于互联网资源的抓取与归档工作。相较于其他爬虫工具,Heritrix提供了更为精细的控制机制,能够帮助用户...

    heritrix的绿色配置包

    在“Heritrix的绿色配置包”中,我们可以理解为这个压缩包包含了Heritrix的精简版或便携版,可能已经预先配置好了一些基本设置,以便用户快速启动和运行爬虫项目。这种绿色配置通常意味着它不需要复杂的安装过程,...

    Heritrix(windows版)

    Heritrix由Internet Archive开发,支持高度可配置和扩展,能够处理各种复杂的网页结构。 在提供的文件列表中,我们有两个主要的压缩文件: 1. **heritrix-3.1.0-dist.zip**:这个文件包含了Heritrix的发行版,也...

    网络爬虫Heritrix1.14.4可直接用

    3. **Heritrix运行与配置**:在`Heritrix1/src/org/archive/crawler/Heritrix.java`文件中启动Heritrix后,服务会在本地的8089端口监听。通过访问`https://localhost:8089`,我们可以使用内置的Web管理界面进行配置...

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

    Heritrix是一个强大的Java开发的开源网络爬虫...其高度的可扩展性和丰富的配置选项,使得Heritrix成为了一个可以满足多样化需求的平台。学习和掌握Heritrix的使用和开发,将有助于提升你在网络数据获取领域的专业技能。

    heritrix-1.14.2.zip

    Heritrix是一个由Internet Archive维护的项目,其设计目标是提供高度可配置和可扩展的爬虫框架。它能够按照预定义的规则抓取网页,这些规则包括URL过滤、深度限制、爬行频率控制等。Heritrix支持HTTP、HTTPS等多种...

    heritrix1.14.0jar包

    在IT行业中,爬虫是获取大量网络数据的重要手段,Heritrix因其灵活性、可扩展性和定制性而备受青睐。标题中的"heritrix1.14.0jar包"指的是Heritrix的1.14.0版本的Java档案文件(JAR),这是运行或构建Heritrix爬虫...

    Heritrix搭建好的工程

    这款工具被设计为可扩展和高度配置的,允许用户根据特定需求定制爬取策略。在本工程中,Heritrix已经被预配置好,可以直接在Eclipse集成开发环境中运行,无需额外设置环境。 首先,让我们详细了解Heritrix的基本...

    lucene+heritrix详细配置加api.chm格式文档

    "lucene+heritrix详细配置加api.chm格式文档"很可能是关于 Lucene 和 Heritrix 的详细配置和 API 使用的综合指南,通过 CHM 文件,用户可以离线浏览和查找相关知识,方便学习和参考。 在实际使用中,开发者可以借助...

    heritrix-1.14.4爬虫框架及源码

    此外,源码还可能包含详细的注释,解释了如何配置和扩展Heritrix。 在学习和使用Heritrix时,开发者需要掌握Java编程语言,因为它是Heritrix的开发语言。同时,熟悉XML配置文件的编写也很重要,因为Heritrix的大...

Global site tag (gtag.js) - Google Analytics