本博客属原创文章,转载请注明出处:http://guoyunsky.iteye.com/blog/1744456
本人新浪微博:http://weibo.com/guoyunwb
Heritrix3.0新特性一大亮点就是,相比以前版本载入种子更灵活(甚至你可以动态载入种子),同时可以载入N个种子.以前版本载入种子是全部加载到内存,而一旦种子过多,那容易导致内存溢出.而新版本会分批次写入硬盘(通过调度器写入).所以避免了这个问题.下面就说一下Heritrix3.0载入种子的四种方式,分别是:直接载入,通过seeds.txt载入,通过ActionDirectory动态载入(注意是动态,你随时可以载入),自定义载入.
1. 直接载入:
直接载入比较方便,只需直接在crawler.beans.cxml中设置就可以,具体设置如下.
- <bean class="org.archive.modules.seeds.TextSeedModule">
- <property>
- <bean>
- <property>
- <value>
- # your seeds
- </value>
- </property>
- </bean>
- </property>
- -->
- <!-- <property name='sourceTagSeeds' value='false'/> -->
- <!--
- </bean>
其中只要把your seeds替换成你想要抓取的URL即可,如http://www.yun5u.com.其中sourceTagSeeds表示是否让新抽取出来的URL记录它的种子.
这个最方便,缺点就是如果种子太多,会使得crawler-beans.xml文件过于庞大,不美观
2. 通过seeds.txt载入
也只需要在crawler.beans.cxml中配置,同时将种子填充到seeds.txt中即可:
- <bean class="org.archive.modules.seeds.TextSeedModule">
- <property>
- <bean>
- <property value="seeds.txt" />
- </bean>
- </property>
- <property name='sourceTagSeeds' value='false'/>
- </bean>
也很方便,同时保持了crawler-beans.cxml的美观.缺点其实1)也有,没有动态性,不能自定义扩展.比如想从数据库导入,甚至加上自己的属性.
3. 通过ActionDirectory动态载入
我觉得ActionDirectory是Heritrix3.0最有作用的新特性.因为可以动态控制抓取.比如想新增抓取的种子,想临时存放一些你不想抓取的URL,以及临时让Heritrix抓取一些URL.ActionDirectory都可以很好的满足.我想这个还是以后要着重介绍下.下面先介绍动态载入种子的适用方法:
首先需要在crawler-beans.cxml中配置ActionDirectory:
- <bean class="org.archive.crawler.framework.ActionDirectory">
- <property name="actionDir" value="action" />
- <property name="initialDelaySeconds" value="10" />
- <property name="delaySeconds" value="30" />
- </bean>
其中actionDir表示你的action目录,你得把动态加载的URL文件放到该目录下.默认为action,表示在Heritrix运行的目录下.
initialDelaySeconds表示,初始化时需要延迟的时间,这里是10秒
delaySeconds表示定时扫描actionDir的间隔时间,这里是30秒.
其中启动actionDirectory这个bean并且运行Heritrix3.0之后,你就会在你的抓取目录下看到action这个目录.当然这里你也可以自己指定.
随后可以生成一个文件,但必须以.seeds或.seeds(.gz)结尾.Heritrix会把以这两种文件名结尾的文件当做种子文件来处理.其中.seeds(.gz)表示压缩文件.将你的种子写入.seeds文件,如test.seeds,再放入action目录,30秒后会发现该文件转移到./action/done目录下,格式为时间.test.seeds.这个时候就表示test.seeds这个种子文件已经被加载了.你再观察下控制台,或者crawl.log就有可能发现你的种子已经被处理了.
当然,这种载入方式,你可以根据你的需要随时运行.
4. 自定义载入.
相信很多人,都有自定义载入种子的这个需求.比如从数据库中载入,或者加上自己的属性.这个就要扩展Heritrix的SeedModule了.我写了一个示例,代码如下:
+
import java.io.File; import java.util.Vector; import org.apache.commons.httpclient.URIException; import org.archive.modules.CrawlURI; import org.archive.modules.SchedulingConstants; import org.archive.modules.seeds.SeedModule; import com.crawl.config.CrawlGlobal; import com.crawl.controller.MyHeritrixController; public class MySeedModule extends SeedModule { private static final long serialVersionUID = 1L; public static MyHeritrixController mhc=MyHeritrixController.getInstance(); // 单例模式,实现获得种子 /** * 对ActionDirectory下.seeds或.seeds.gz的处理 */ @Override public void actOn(File f) { } /** * 添加种子,比如动态添加了种子,这里既要将其载入,又要将其记录下来 */ @Override public void addSeed(CrawlURI curi) { } /** * 载入种子 */ @Override public void announceSeeds() { Vector seeds=mhc.getSeeds(); // 获得种子,这里需要根据你的需要自己实现. String url=null; CrawlURI curi=null; try { for(int i=0; i< seeds .size();i++){ url=seeds.get(i); if(url!=null&&!url.equals("")){ curi=HeritrixUrlUtil.urlToCrawlURI(url, SchedulingConstants.MEDIUM); // 自己实现的方法,将String类型的URL转换为CrawlURI curi.setSeed(true); // 设置为种子 curi.setSourceTag(curi.toString()); // 记录该URL来源的种子URL curi.getData().put(CrawlGlobal.SITE_ID,new Integer(i) ); // 自定义属性 curi.makeHeritable(CrawlGlobal.SITE_ID); // 持久化自定义属性 curi.setForceFetch(true); // 设置为强制抓取,已经抓取过也继续抓取 publishAddedSeed(curi); // 提交种子 } } } catch (URIException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } view plaincopy to clipboardprint? // HeritrixUrlUtil.urlToCrawlURI(url, SchedulingConstants.MEDIUM); 代码 /** * 将字符串形式的URL转换为CrawlURI * @param url * @param priority * @return * @throws URIException */ public static CrawlURI urlToCrawlURI(String url,int priority) throws URIException{ if (!url.matches("[a-zA-Z][\\w+\\-]+:.*")) { url = "http://" + url; } url=url.replace("&", "&"); UURI uuri=UURIFactory.getInstance(url); CrawlURI curi=new CrawlURI(uuri); curi.setSchedulingDirective(priority); return curi; }
更多技术文章、感悟、分享、勾搭,请用微信扫描:
相关推荐
Heritrix 3.0 是一个强大的网络抓取框架,其设计目的是为了高效、灵活地爬取互联网上的信息。在Heritrix 3.0中,`crawler-beans.cxml` 文件扮演着至关重要的角色,它是整个爬虫的配置中心,负责定义和管理爬虫的行为...
Heritrix3种子载入方式共有四种,分别是: 1. 直接载入方式: 直接载入是通过配置文件直接指定种子的方式。这种方式操作简单,适合种子数量较少且不需要频繁更换种子的场景。用户在配置文件中直接指定种子URL列表...
它在2009年12月发布了3.0.0版本,并随着时间的推移不断更新,提供了3.0.1补丁版和3.2.0版,增加了新的特性和功能,比如更简单的使用方式、持续爬行以及处理大规模爬行任务的能力。Heritrix 3 的文档包括用户指南和...
2. **Heritrix架构**:Heritrix采用模块化设计,包括种子管理器、URI调度器、爬取策略、处理器链、存储模块等。每个模块都有其特定功能,如种子管理器负责管理起始抓取URL,调度器负责控制爬取速率和优先级。 3. **...
为了帮助新手用户快速上手,Heritrix 提供了一个简单的教程,引导用户完成从创建任务到执行任务的全过程。主要包括以下几个步骤: 1. **创建任务**:通过 Web 界面创建一个新的抓取任务。 2. **配置参数**:设置任务...
### Heritrix安装详细过程及配置指南 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,被广泛应用于互联网资源的抓取与归档工作。相较于其他爬虫工具,Heritrix提供了更为精细的控制机制,能够帮助用户...
在Heritrix 3.1中,核心概念包括种子(Seeds)、作业(Jobs)、模块(Modules)和策略(Policies)。种子是指定爬虫起始抓取的URL集合,作业则包含了完整的爬取配置,包括种子、模块和策略。模块是可插拔的组件,...
Heritrix的设计遵循模块化和可扩展的原则,它将爬虫的功能分解为多个独立的组件,如种子管理器、下载器、解析器等,这些组件可以通过插件系统进行更换或增强。这种设计使得Heritrix能够灵活地处理各种复杂的网页抓取...
- 通过命令行方式启动Heritrix服务。 - 确认服务已成功监听8080端口。 2. **访问WebUI**: - 在浏览器中输入`http://127.0.0.1:8080`访问Heritrix的Web用户界面。 - 使用预先设置的用户名和密码登录。 3. **创建...
7. **数据存储**:Heritrix可以将抓取的数据存储为WARC(Web ARChive)格式,这是一种标准的档案格式,便于长期保存和分析。WARC文件包含原始的HTTP响应,包括头部信息和内容,可以使用专门的工具进行解析和检索。 ...
Heritrix 1.14.2 是一个开源的网络爬虫工具,它主要用于抓取互联网上的网页和其他在线资源。这个版本的Heritrix在2007年左右发布,虽然较旧,但它仍然是理解网络爬虫技术的一个重要参考。 Heritrix是一个由Internet...
9. **学习资源**:压缩包中的“Heritrix学习源码和资料”可能包含官方文档、教程、示例代码以及社区讨论等内容,这些资料可以帮助初学者快速上手并深入理解Heritrix的内部机制。 10. **实战应用**:Heritrix不仅...
Heritrix是一款开源的网络爬虫软件,专为大规模网页抓取而设计。这款工具主要用于构建互联网档案馆、搜索引擎的数据源以及其他需要大量网页数据的项目。Heritrix由Internet Archive开发,支持高度可配置和扩展,能够...
Heritrix的配置主要通过XML文件进行,这些文件定义了爬取行为的方方面面,如种子URL、抓取策略、排除规则等。例如,“crawldb.xml”用于定义数据库设置,“fetcher.xml”则包含了下载器的相关配置。在Eclipse中,...
Heritrix是IA的开放源代码,可扩展的,基于整个Web的,归档网络爬虫工程 Heritrix工程始于2003年初,IA的目的是开发一个特殊的爬虫,对网上的 资源进行归档,建立网络数字图书馆,在过去的6年里,IA已经建立了400...
启动方式有两种:一是使用CrawlController进行后台加载任务,这需要编程知识;二是更常见的WebUI方式,通过浏览器访问和管理爬虫任务。 Heritrix的主要入口点是org.archive.crawler.Heritrix类。在运行这个类时,...
Heritrix是一款强大的开源网络爬虫工具,由互联网档案馆(Internet Archive)开发,用于抓取和保存网页数据。在IT行业中,爬虫是获取大量网络数据的重要手段,Heritrix因其灵活性、可扩展性和定制性而备受青睐。标题...
MyEclipse是一种强大的Java EE集成开发环境,对Java项目的支持非常全面,因此它是部署和调试Heritrix的理想平台。 安装Heritrix在MyEclipse中的基本步骤通常包括: 1. 解压缩"heritrix-1.14.4.zip"到本地目录。 2. ...