Heritrix抓取

抓取是heritrix+hibernate+jsoup三个结合,heritrix是框架,hibernate是负责连接数据库,jsuop是负责解析页面,jsoup语法类似于jquery,下面主要介绍下heritrix,我是个使用者,环境的搭建我还不能独立完成。

1.Heritrix 简介

Heritrix是一个专门为互联网上的网页进行存档而开发的网页检索器。它使用Java编写并且完全开源。它主要的用户界面可以通过一个web流量器来访问并通过它来控制检索器的行为,另外,它还有一个命令行工具来供用户选择调用。

Heritrix是由互联网档案馆和北欧国家图书馆联合规范化编写于2003年初。第一次正式发布是在2004年1月,并不断的被互联网档案馆和其他感兴趣的第三方改进着。到现在已经成为一个成熟的开源爬虫,并被广泛使用。

Heritrix的操作模型:

从模型中可以看到,利用Heritrix我们可以轻松从互联网上获取信息并将它们全部存储下来,然后可以任意的访问获取到的网页信息并可以查看报告。

 

Heritrix的整体结构简图如下:


它的工作流程是一个循环,具体流程是:

  1 在预定的URI中选择一个。

  2 从选择的URI的网址下载远程文件

  3 分析,归档下载到的内容

  4 从分析到的内容里面选择感兴趣的URI。加入预定队列。

  5 标记已经处理过的URI

 

在大概的了解了Heritrix及它的工作机制之后,我们就可以开始Heritrix的使用了。

1.1.  搭建heritrix3.1【转载】

由于本人正在准备将heritrix1.14升级到3.1 ,觉得这篇文章挺有用的,于是就cp一下,记录下来,非本人所原创,下面是原创的文章:

 

 上已经有几篇Heritrix 1.14版本的Eclipse搭建的文章,说的比较详细。本人下载了Heritrix 3.1,该版本相对Heritrix 1.14版本变化已经较大,在研究Heritrix零星的几个文档以后终于把环境搭建成功了,并把过程记录下来,希望对大家有所帮助。

      Heritrix 3.1需要jdk1.6或以上版本。本人用的Eclipse3.7 JEE版本(非必须条件)。操作步骤如下:

1、下载Heritrix 3.1

       Heritrix 3.1的下载地址是:http://sourceforge.net/projects/archive-crawler/files/heritrix3/3.1.0/ 我把heritrix-3.1.0-dist.zipheritrix-3.1.0-src.zip两个包都下载下来,二者都会用到。将这两个压缩包分别解压。

2、建立Eclipse项目

     1)新建项目

      理论上建立普通java项目即可,我是建立的一个web项目,否则提示不能访问sun.security.tools.KeyTool.java”,知道原因的同志告诉我。

      2)添加库文件

      在项目中建立一个lib目录,并将heritrix-3.1.0-dist.zip解压后的lib目录下的所有jar文件(heritrix- commons-3.1.0.jarheritrix-engine-3.1.0.jarheritrix-modules-3.1.0.jar随着代码的加入可以逐步删除)拷贝到项目的lib目录下。然后再项目属性--java Build path中将这些jar引用到项目中。

     3)添加代码

     heritrix-3.1.0\engine\src\main\java(对应heritrix-engine-3.1.0.jar)添加到 Eclipsesrc目录,此时Heritrix 3.1就可以运行了。为了看代码方便,还是将其他部分的代码都加入到项目,分别是:heritrix-3.1.0\commons\src\main \java目录(对应heritrix-commons-3.1.0.jar)和heritrix-3.1.0\modules\src\main \java目录(对应heritrix-modules-3.1.0.jar)。这样你就可以删除heritrix-commons- 3.1.0.jarheritrix-engine-3.1.0.jarheritrix-modules-3.1.0.jar三个包的引用,直接使用源代码运行。

3、运行Heritrix 3.1

    Heritrix 3.1运行以后可以通过一个web服务器来管理他。但首先要将他运行起来。在org.archive.crawler有个带main函数的 Heritrix,启动它就可以将Heritrix3.1运行起来。但要设置启动参数-a admin:admin(输入启动账号),在Eclipse Run configuration中设置如下图:

然后运行Heritrix.java,如果一切正常你可以通过:http://localhost:8443 访问Heritrix 3.1的管理网站。

不过这时系统里还一片空白,你需要建立一个网页抓取的任务(job.

4、建立和配置抓取任务

    登录管理控制台(用户名admin密码admin),在管理界面首页找到如下图这个位置:

输入一个名称(如myjob,然后点击“Create”按钮。

这时候根据默认模版生成了一个抓取任务,但还不能抓取任何东西,我们需要通过配置文件的修改告诉服务器,我们要抓取什么。

在管理控制台的Job Directories中选择要配置的job(下图中myjob

进入myjob的管理界面,如下图:

点击edit按钮,开始编辑配置文件,配置需要修改的地方如下图所示,先从简单的做起:

 

配置13的配置内容是一样的,operatorContactUrl写成http://localhost, jobNamedescription随便写点东西即可。

配置2则是配置搜索种子网站的列表,我这里先写了一个http://www.sina.com.cn,先抓取新浪网站试试。

点击最上面的“Save changes"保存所有的配置文件。

这三个地方配置好就可以运行这个抓取任务试试了。

这时候需要执行如下操作(回到myjob的配置界面),让任务运行起来:

1)点击“build”编译当前的配置。

2)点击“launch”按钮运行当前任务至挂起状态,如果job已经运行,则先点击“teardown”按钮;

3)这时任务处于挂起状态,点击“unpause”即立即启动任务。

如果系统正常运行,会有如下类似提示信息:

在项目的jobs\myjob\20120623061610\warcs目录下有一个逐步增大的文件,这就是抓取下来的网页。

 

果要看到每个抓取的页面,可以将配置文件的warcWriter这个beanclass改为 org.archive.modules.writer.MirrorWriterProcessor,这样就下载的网页是以镜像文件的形式保存在,一般存放在项目根目录下的mirror目录下。

从现在开始慢慢研究Heritrix吧。

 

今天按照上面转载的文档搭建了一下heritirx3.1的环境,基本上还是成功的,可以成功的运行,但是在运行的时候报了一个错误,错误如下:

 

严重: TLD list unavailable

java.lang.NullPointerException

       at java.io.Reader.<init>(Reader.java:61)

       at java.io.InputStreamReader.<init>(InputStreamReader.java:55)

       at org.archive.util.ArchiveUtils.<clinit>(ArchiveUtils.java:874)

       at org.archive.crawler.Heritrix.instanceMain(Heritrix.java:380)

       at org.archive.crawler.Heritrix.main(Heritrix.java:189)

Heritrix version: UNKNOWN

无法显示版本号,这个问题暂时还没有找到是什么引起的,运行界面是可以正常运行的!

 

由于本人还算是个相对的完美主义者,对于上面的错误,心里还是觉得很难受的!!别扭!

于是刚才花了几分钟看了下源代码,是heritrix在启动的时候会到org.archive.util下面读取3个配置文件,分别是:

version.txt

timestamp.txt

tlds-alpha-by-domain.txt

 

这三个文件在srczip包里面并不存在,但是可以在dist.ziplib目录下,找到heritrix-commons-3.1.0.jar这个文件,

在里面的org.archive.util下面找到上面的3txt文件,拷贝到你的项目的src\org\archive\util下面,在重新运行,问题完美解决!!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值