一、引言:

  Heritrix3.x与Heritrix1.x版本差异比较大,全新配置模式的引入+扩展接口的变化,同时由于说明文档的匮乏,给Heritrix的开发者带来困惑,前面的文章已经就Heritrix的配置部署和运行做了说明,本文就Heritrix3.x版本就Extractor扩展做出实例说明。

二、配置说明

  Heritrix3.x的WebUI发生了变化,不在是原来那种WebUI选择模式,而是变成了在线配置文件直接编辑模式。在这里自定义的Extractor要想加入Heritrix运行,首先需要修改配置文件,降自定义扩展的Extractor加入到Heritrix的Processor队列。完整配置文件如下所示:

  2.1 配置文件

  <!-- FETCH CHAIN -->
<!-- processors declared as named beans -->
<bean id="preselector" class="org.archive.crawler.prefetch.Preselector">
</bean>
<bean id="preconditions" class="org.archive.crawler.prefetch.PreconditionEnforcer">
</bean>
<bean id="fetchDns" class="org.archive.modules.fetcher.FetchDNS">
</bean>
<bean id="fetchHttp" class="org.archive.modules.fetcher.FetchHTTP">
</bean>
<bean id="extractorHttp" class="org.archive.modules.extractor.ExtractorHTTP">
</bean>
-------------------------------自定义Extractor------------------------------------
<bean id="SohuNewsExtractor" class="my.SohuNewsExtractor">
</bean>
---------------------------------------------------------------------------------
<bean id="extractorHtml" class="org.archive.modules.extractor.ExtractorHTML">
</bean>
<bean id="extractorCss" class="org.archive.modules.extractor.ExtractorCSS">
</bean>
<bean id="extractorJs" class="org.archive.modules.extractor.ExtractorJS">
</bean>
<bean id="extractorSwf" class="org.archive.modules.extractor.ExtractorSWF">
</bean>
<!-- assembled into ordered FetchChain bean -->
<bean id="fetchProcessors" class="org.archive.modules.FetchChain">
<property name="processors">
<list>
<!-- recheck scope, if so enabled... -->
<ref bean="preselector"/>
<!-- ...then verify or trigger prerequisite URIs fetched, allow crawling... -->
<ref bean="preconditions"/>
<!-- ...fetch if DNS URI... -->
<ref bean="fetchDns"/>
<!-- ...fetch if HTTP URI... -->
<ref bean="fetchHttp"/>
<!-- ...extract oulinks from HTTP headers... -->
<ref bean="extractorHttp"/> ----------------------------自定义Extractor----------------------------------------------
<!-- ...extract oulinks from HTTP content... -->
<ref bean="SohuNewsExtractor"/>
---------------------------------------------------------------------------------------
<!-- ...extract oulinks from HTML content... -->
<ref bean="extractorHtml"/>
<!-- ...extract oulinks from CSS content... -->
<ref bean="extractorCss"/>
<!-- ...extract oulinks from Javascript content... -->
<ref bean="extractorJs"/>
<!-- ...extract oulinks from Flash content... -->
<ref bean="extractorSwf"/>
</list>
</property>
</bean>

  2.2 添加Bean和配置调度列表

  <bean id="extractorHttp" class="org.archive.modules.extractor.ExtractorHTTP">
</bean>
-------------------------------自定义Extractor------------------------------------
<bean id="SohuNewsExtractor" class="my.SohuNewsExtractor">
</bean>
---------------------------------------------------------------------------------
...
----------------------------自定义Extractor---------------------------------------
<!-- ...extract oulinks from HTTP content... -->
<ref bean="SohuNewsExtractor"/>
---------------------------------------------------------------------------------
配置完成以上部分,既可以实现自定义Extractor参与Processor任务处理的调度。

 三、程序说明

  3.1 Extractor基类

  Extractor基类发生了变化,新增了新的接口方法:

     @Override
protected boolean shouldProcess(CrawlURI uri) {
// TODO Auto-generated method stub
return false;
}

  如果不实现此方法,自定义扩展的Extractor的函数void extract(CrawlURI uri)将不会被调度。

  3.2 构造函数

  1.x版本的构造函数如下:  

    public Extractor(String name, String description) {
super(name, description);
// TODO Auto-generated constructor stub
}

  3.x版本的构造函数取消了参数,采用的默认构造函数。

四、遗留问题

  protected void extract(CrawlURI curi)

  {

  //1. 做哪些处理?

  //2. 如何控制后续的下载行为,要求只下载自己想要的内容

  }

Heritrix3.x自定义扩展Extractor的更多相关文章

  1. SharePoint 2013 自定义扩展菜单

    在对SharePoint进行开发或者功能扩展的时候,经常需要对一些默认的菜单进行扩展,以使我们开发的东西更适合SharePoint本身的样式.SharePoint的各种功能菜单,像网站设置.Ribbo ...

  2. SharePoint 2013 自定义扩展菜单(二)

    接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomA ...

  3. WCF自定义扩展,以实现aop!

    引用地址:https://msdn.microsoft.com/zh-cn/magazine/cc163302.aspx  使用自定义行为扩展 WCF Aaron Skonnard 代码下载位置: S ...

  4. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  5. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  6. jQuery 自定义扩展,与$冲突处理

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. SparkContext自定义扩展textFiles,支持从多个目录中输入文本文件

    需求   SparkContext自定义扩展textFiles,支持从多个目录中输入文本文件   扩展   class SparkContext(pyspark.SparkContext): def ...

  8. 基于 HtmlHelper 的自定义扩展Container

    基于 HtmlHelper 的自定义扩展Container Intro 基于 asp.net mvc 的权限控制系统的一部分,适用于对UI层数据呈现的控制,基于 HtmlHelper 的扩展组件 Co ...

  9. 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)

    一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

随机推荐

  1. css居中参考

    http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html

  2. 写在连载之前——DIY微型操作系统篇

    这个博客开了这么久都没写过什么东西.可能是因为我想写的东西在网上都能找得到,所以自己也懒得去写了. 但是这次当我在看<30天自制操作系统>这本书的时候发现,如果不用作者原版的光盘软件,要自 ...

  3. isKindOfClass in cocos2d-x

    在最新版2.*的cocos2d-x中isKindOfClass可以用如下代码代替. 未验证,不过看了引擎代码是这样写的   原代码 [s1 isKindOfClass:[DestHole class] ...

  4. mysql 下载和 安装

    一.下载mysql 1. 在浏览器里打开mysql的官网http://www.mysql.com/ 2. 进入页面顶部的"Downloads" 3. 打开页面底部的“Communi ...

  5. css中的单位px,em和rem的区别

    一.px: px就是像素,用px设置字体大小的时候会比较精确,但是有时候我们会使用不同屏幕尺寸去浏览网页.当页面相应的扩大或者缩小的时候,页面的字体大小就会出现过小或者过大.由于这种问题,就提出了使用 ...

  6. 大数开根号java模板

    利用逼近的思路直接二分开方找出值 package lanqiao; import java.math.BigInteger; import java.util.Scanner; public clas ...

  7. iview Model对话框点击确定后iview会自动关闭窗口

    问题描述:在某个页面需打开一个Model,然后这个Model里有一个Form表单,点击确定时我需要先校验表单数据是否输入正确,不确定则不希望关闭窗口:(问题是:只要点击确认 loading :fals ...

  8. opencv-python教程学习系列2-读取/显示/保存图像

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的读取.显示以及保存,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: ...

  9. ASP.NET MVC开发基础

    一.ASP.Net MVC的开发模式 (1)处理流程 在ASP.Net MVC中,客户端所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Mode ...

  10. 【maven】在idea上创建maven多模块项目

    参考:https://www.cnblogs.com/wangmingshun/p/6383576.html 一:创建父项目 (1)idea引导页 (2)创建父项目,不需要选择maven插件 (3)完 ...