`
444878909
  • 浏览: 635983 次
文章分类
社区版块
存档分类
最新评论

Heritrix1.14.4安装配置和使用

 
阅读更多

学习研究heritrix已经有了一段时间了,想写一些博文,一来是方便以后自己查阅,二来和广大博友们分享交流,提高认识。

本系列文章所用环境:heritrix1.14.4 + myeclipse8.5

heritrix1.14.4源码包下载:http://download.csdn.net/detail/kath_y/5788787

废话不多说,直接开始本栏目的学习。

一、在myeclipse中安装配置heritrix

1、新建空的java项目(注意不是WEB项目),命名为Heritrix;

2、把heritrix-1.14.4-src\src\java\目录下的org、st和com文件夹拷贝到Heritrix/src目录下;

3、把heritrix-1.14.4\src下的wbapps文件夹拷贝到heritrix目录下;

4、右击heritrix项目,点击properties ,通过JavaBuildPath,将heritrix-1.14.4-src下的lib目录下的所有包导入进来;(此时工程目录下会自动生成一个Referenced Libraries)

5、解压缩heritrix-1.14.4目录下的heritrix-1.14.4.jar文件,把解压后的所有文件和文件夹(除org、st、com文件夹和heritrix.properties文件外)拷贝到heritrix目录下;

6、将heritrix-1.14.4目录下的conf文件夹拷贝到heritrix目录下;并将heritrix目录下的profiles、modules、selftest文件夹移入conf文件夹中;

7、打开eclipse下的heritrix/conf/heritrix.properties文件,找到"heritrix.cmdline.admin=",修改为“heritrix.cmdline.admin = admin:admin”;(admin:admin对应登录时的用户名:密码,可以根据自己喜好修改)

8、Conf/jmxremote.password.template拷贝到heritrix目录下。改名为:jmxremote.password,最后再行改成:

monitorRole admin

controlRole admin

9、找到org.archive.crawler包,运行Heritrix.java中的main函数。

可能会出现的异常:

1、在Heritrix.java中出现File URLConnection 红叉

解决办法:依次点击Window->java->Compiler->Errors/Warnings,将Forbidden reference(access rules)的选项从Error改为Warning,点击Apply,点击OK。

2、出现的异常......thread-10org.archive.util.ArchiveUtils.<linit>( )TLD list....

解决办法:将\heritrix-1.14.4-src\heritrix-1.14.4\src\resources\org\archive\util 下的文本文档拷贝到heritrix中的src\org\archive\util下;

最终运行Heritrix.java的正确结果如下:

登录并创建一个简单的JOB

1、打开浏览器,输入http://localhost:8080,进入heritrix的登录页面

2、点击Login按钮后进入heritrix的控制台界面

①左边红色方框里介绍的是当前heritrix的一些信息。

②右边蓝色框内显示了当前Java虚拟机的一些状态,如上图所示,可以看到当前的堆大小为4184KB,而已经被使用了3806KB,另外,最大的堆内容可以达到65088KB,也就是在64M左右。在正式抓取的时候,64M的最大内存是不够用的,一般至少设置为512M。设置过程如下:右键点击Heritrix->Run As->Run Configurations,进入该页面,选择Arguments项,在VM arguments:框下输入:-Xmx512m,点击Apply。

重新启动heritrix,登录后可以看到最大内存已经改到了520256 KB,即512M。

3、创建一个Job

(1)点击控制台页面的Jobs按钮,进入如下界面

在创建页面有四种创建方式,含义如下:

①Based on existing job:以一个已经有的抓取任务为模板,创建所有抓取属性和抓取起始URL的列表。

②Based on a recovery:在以前的某个任务中,可能设置过一些状态点,新的任务将从这个设置的状态点开始。

③Based on a profile:专门为不同的任务设置了一些模板,新建的任务将按照模板来生成。

③With defaults:这个最简单,表示按默认的配置来生成一个任务。

(2)、点击选择最简单的With Defaults方式,创建一个新的任务

在Heritrix中,一个任务对应一个描述文件。这个描述文件的默认的名称为order.xml。每次创建一个新任务时,都相当于生成了一个order.xml的文件。文件中详细记录了Heritrix在运行时需要的所有信息。例如,它包括该用户所选择的Processor类、Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。上面所说的4种创建抓取任务的方式,其实都是在生成一个order.xml文件。其中,第4种With defaults,则是直接拷贝默认的order.xml文件。在所创建的Eclipse工程或是命令行启动的Heritrix下载包中,该默认的order.xml文件均是放于profiles\default目录下的。

关于order.xml的细节,在此还不必深究。接下的学习中会做介绍。

在新建任务的名称上,填入“sina_blog”,表示该抓取任务将抓取新浪博客的信息。在Description中随意填入字符,然后再在seeds框中,填入新浪博客首页地址。

这里需要解释一下seeds的含义。所谓seeds,其实指的是抓取任务的起始点。每次的抓取,总是需要从一个起始点开始,在得到这个起始点网页上的信息后,分析出新的地址加入抓取队列中,然后循环抓取,重复这样的过程,直到所有链接都分析完毕。在新建任务的过程是可以填多个Seeds作为起点的,以上只作为一个示例,所以只填了新浪博客的首页地址

(3)、设置抓取时的处理链

在上图的下边有一排按钮:Modules Submodulers Settings Overrides Submit job,点击Modules按钮,进入处理链设置页面。

此时页面并没有做配置的Add/Change按钮及相应的下拉菜单,我们需要在myeclipse中将modules的上一级目录放到项目的classpath中,过程如下:

右键Heritrix->Run As->Run configuratins.....->classpath->user Entries->Advanced->Add External Folder,找到modules的上一级目录conf加入即可。

重新启动Heritrix项目,登录并和之前一样创建job,到Modules页面可以看到,页面如下:

此时,页面中出现了Add/Change的配置按钮。

从上而下,可以看到,需要配置的内容共有7项,其中CrawlScope和Frontier是两个最重要的组件。

①CrawlScope用于配置当前应该在什么范围内抓取网页链接。比如,如果选择BroadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内。我们选择BroadScope。

②Frontier则是一个URL的处理器,它将决定下一个被处理的URL是什么。同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。我们使用BdbFrontier类来做为处理器(其实Heritrix也只有这一个可用的Frontier),全权掌管URL的分配。

除了以上两个组件外,还有5个队列要配。这五个队列根据先后的顺序,就依次组成了Heritrix的整个处理器链。5个队列的含义分别如下:

Ⅰ、PreProcessor:这个队列中,所有的处理器都是用来对抓取时的一些先决条件做判断的。比如判断robot.txt的信息等,它是整个处理器链的入口。

Ⅱ、Fetcher:从名称上看,它用于解析网络传输协议,比如解析DNS、HTTP或FTP等。这里我们主要使用FetchDNS和FetchHTTP两个类。

Ⅲ、Extractor:它的名字就很好的揭示了它的作用。它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。在这个队列中,包括了一系列的工具,如解析HTML、CSS等。在解析完毕,取出页面中的URL后,将它们放入队列中,等待下次继续抓取。在演示中,使用两种Extractor,即ExtractorHTTP和ExtractorHTML。

Ⅳ、Writer:主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些,因此,我们命名用镜象Mirror方式。

Ⅴ、PostProcessor:在整个抓取解析过程结束后,进行一些扫尾的工作,比如将前面Extractor解析出来的URL有条件的加入到待处理队列中去。

值得一提的是,在处理器链的设置过程中,每一个队列中的处理器都是要分先后顺序的,信息的处理流程实际上是不可逆的,因此,在设置时,可以看见在队列的右侧总是有“Up”、“Down”和“Remove”这样的操作,以帮助能够正确的设置其顺序。

在设置完Hertrix所需的处理链后,仍然还不能够马上开始抓取任务,还需对默认的运行时参数做一些修改,以适应真正的需要。

(4)、设置运行时的参数

在设置完处理链后,在页面顶部或底部都可以找到如下图所示的菜单项,单击“Settings”链接,就进入了属性设置的页面。

如下图在属性设置页面上有非常多的输入域,Heritrix在抓取网页时,这些域是用来对的各个组件的值进行预设。

由于页面上的内容非常多,使用者可能无法全部了解它们的作用。所以Heritrix提供了一个辅助功能,来在最大程度上让使用者了解每个参数的含义。

可以看到,在每个属性的右侧都有一个小问号,当单击问号时,就会弹出一个Javascript的Alert提示框,上面介绍了当前属性的作用。例如,在上图中单击“max-toe-threads”属性,通过Alert的提示可以知道,它表示的是同时处理URIS的线程的最大数目。默认是100,我们设置为50。

当在第一次使用Heritrix时,所需要设置的参数并不多,以默认设置为主。以下就来介绍一些必须要在第一次使用时就要配置好的参数。

①max-toes-threads

该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。该参数的默认值为100,而事实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。

②HTTP-Header

在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。默认情况下,这两个属性的值如下图

很明显,这样的值是无法完成真实的HTTP协议的模拟的,所以,必须要将值改掉。可以参照下图:

其实只需要最后的URL和联系邮箱格式正确就可以了,可以随便设置。

(5)、完成Job的创建

在完成上述的设置之后,任务就创建成成功了,点击下图"Submit job"按钮提交任务。

提交任务后,会跳转到如下页面,表示任务创建成功。

从图中看到,有一个Pending Jobs,也就是我们之前创建的任务sina_blog。接下来,我们就去启动我们的任务,开始抓取网页。

三、启动Job,抓取网页

1、点击“Console”按钮回到Console界面,可以看到刚刚创建的任务已经启动了,等待我们开始它

点击"Start"按钮,“Pending”状态的抓取任务激活,开始抓取网页。

2、分析抓取页面的一些信息。

当我们点击"Start"开始抓取网页后,控制台界面如下:

界面中Rates框中显示的是抓取的速度。Mermory框中反应的是java虚拟机的内存状态。Load框中显示的是抓取的线程数以及队列的负载以及一些其他信息。Totals框中则是已经处理的链接数和总共分析出的链接数的比值,但这个值往往不是准确的,因为当页面在不断被抓取分析时,链接的数量也会不断的增加,因此,这个百分比的数字也在不断的变化。如图所示:此时总共抓取到的链接数已经达到了78560个,处理了2712个,它的百分比数量为3%。

到这里,已经把Heritrix成功的运行起来,并且抓取了一定的内容。接下来,看一下heritrix是如何存储抓取下来的内容的。

四、Heritrix的镜像存储结构

由于在前面设置了Writer的类型为MirrorWriter。因此,磁盘上应该留有了所抓取到的网页的各种镜象。那么,究竟Heritrix是如何存储下镜象信息的呢?打开Eclipse的workspace目录,进入heritrixProject的工程,里面有一个jobs目录。进入后,找到以刚才job的名称打头的文件夹,这里面的内容,就是Heritrix在运行时实时生成的。其中,有一个mirror目录,进入后,如下图所示:

其实所谓镜象方式存储,就是将URL地址按“/”进行切分,进而按切分出来的层次存储,比如一个URL地址为:http://blog.sina.com.cn/index.html

那么它在mirror目录中的保存位置就该是blog.sina.com.cn目录下的index.html文件。

五、停止抓取任务

当用户进行某个抓取任务时,有两种方法会让任务停止下来。

1.正常终止

第一种方法当然就是任务的自然结束,其条件为所有队列中的URI都已经被处理过了。此时,任务将自然终止。在“Jobs”面版上会看到任务已经完成,被加入到“Completed jobs”列表中。

2.强行终止

当然,任务不可能总是运行完,这可能是因为对任务的控制不够,结果抓取了太多不相关的信息,进而造成URL队列无限制膨胀,无法终止。在这种情况下,就需要强行将任务终止。在Console面版上有如下图所示的一排链接,最后一个“Terminate”链接,就是用来终止当前运行的任务。

单击“Terminate”链接后,当前在运行的抓取任务就会立即终止,并同样将任务放置到“Jobs”面版上的“Completed jobs”列表中,只不过在“status”上,它会显示“Finished - Ended by operator”这样的提示。

当然,如果用户希望关闭Heritrix,并终止所有正在运行的任务,也可以单击Console面版上的“Shutdown Heritrix software”的链接,此时,Heritrix会弹出一个警告,告诉你如果关闭Heritrix,则当前一切正在运行的任务都将被终止。如下图所示。

如果选择“I’m sure, shut it down”,则Heritrix的WebUI将会终止,虚拟机进程结束。

六、接下来的目标

关于heritrix的配置及初次使用,就写到这里了,接下来将进行heritrix的部分源码分析及扩展,改造成自己想要的爬虫。欢迎各位博友们拍砖交流,指点接下来的研究线路!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics