Heritrix.docx

上传人:b****4 文档编号:4889315 上传时间:2022-12-11 格式:DOCX 页数:54 大小:525.17KB
下载 相关 举报
Heritrix.docx_第1页
第1页 / 共54页
Heritrix.docx_第2页
第2页 / 共54页
Heritrix.docx_第3页
第3页 / 共54页
Heritrix.docx_第4页
第4页 / 共54页
Heritrix.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

Heritrix.docx

《Heritrix.docx》由会员分享,可在线阅读,更多相关《Heritrix.docx(54页珍藏版)》请在冰豆网上搜索。

Heritrix.docx

Heritrix

Lucene很强大,这点在前面的章节中,已经作了详细介绍。

但是,无论多么强大的搜索引擎工具,在其后台,都需要一样东西来支援它,那就是网络爬虫Spider。

网络爬虫,又被称为蜘蛛Spider,或是网络机器人、BOT等,这些都无关紧要,最重要的是要认识到,由于爬虫的存在,才使得搜索引擎有了丰富的资源。

Heritrix是一个纯由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。

它来自于www.archive.org。

Heritrix最出色之处在于它的可扩展性,开发者可以扩展它的各个组件,来实现自己的抓取逻辑。

本章就来详细介绍一下Heritrix和它的各个组件。

10.1 Heritrix的使用入门

要想学会使用Heritrix,当然首先得能把它运行起来。

然而,运行Heritrix并非一件容易的事,需要进行很多配置。

在Heritrix的文档中对它的运行有详细的介绍,不过尽管如此,笔者仍然花了大量时间,才将其配置好并运行成功。

10.1.1 下载和运行Heritrix

Heritrix的下载页面为:

http:

//crawler.archive.org/downloads.html。

从上面可以链接到SourceForge的下载页面。

当前Heritrix的最新版本为1.10。

(1)在下载完Heritrix的完整开发包后,解压到本地的一个目录下,如图10-1所示。

图10-1 Heritrix的目录结构

其中,Heritrix所用到的工具类库都存于lib下,heritrix-1.10.1.jar是Heritrix的Jar包。

另外,在Heritrix目录下有一个conf目录,其中包含了一个很重要的文件:

heritrix.properties。

(2)在heritrix.properties中配置了大量与Heritrix运行息息相关的参数,这些参数主要是配置了Heritrix运行时的一些默认工具类、WebUI的启动参数,以及Heritrix的日志格式等。

当第一次运行Heritrix时,只需要修改该文件,为其加入WebUI的登录名和密码,如图10-2所示。

图10-2 修改Heritrix的WebUI的登录名和密码

其中,用户名和密码是以一个冒号进行分隔,使用者可以指定任何的字符串做为用户名密码,图中所示只不过延续了Heritrix以前版本中默认的用户名和密码而已。

(3)在设置完登录名和密码后,就可以开始运行Heritrix了。

Heritrix有多种方式启动,例如,可以使用CrawlController,以后台方式加载一个抓取任务,即为编程式启动。

不过最常见的还是以WebUI的方式启动它。

(4)Heritrix的主类为org.archive.crawler.Heritrix,运行它,就可以启动Heritrix。

当然,在运行它的时候,需要为其加上lib目录下的所有jar包。

以下是笔者在命令行中启动Heritrix时所使用的批处理文件,此处列出,仅供读者参考(笔者的Heritrix目录是位于E盘的根目下,即E:

\heritrix)。

代码10.1

java-Xmx512m-Dheritrix.home=e:

\\heritrix-cp"E:

\\heritrix\\lib\\commons-codec-1.3.jar;E:

\\heritrix\\lib\\commons-collections-3.1.jar;E:

\\heritrix\\lib\\dnsjava-1.6.2.jar;E:

\\heritrix\\lib\\poi-scratchpad-2.0-RC1-20031102.jar;E:

\\heritrix\\lib\\commons-logging-1.0.4.jar;E:

\\heritrix\\lib\\commons-httpclient-3.0.1.jar;E:

\\heritrix\\lib\\commons-cli-1.0.jar;E:

\\heritrix\\lib\\mg4j-1.0.1.jar;E:

\\heritrix\\lib\\javaswf-CVS-SNAPSHOT-1.jar;E:

\\heritrix\\lib\\bsh-2.0b4.jar;E:

\\heritrix\\lib\\servlet-tomcat-4.1.30.jar;E:

\\heritrix\\lib\\junit-3.8.1.jar;E:

\\heritrix\\lib\\jasper-compiler-tomcat-4.1.30.jar;E:

\\heritrix\\lib\\commons-lang-2.1.jar;E:

\\heritrix\\lib\\itext-1.2.0.jar;E:

\\heritrix\\lib\\poi-2.0-RC1-20031102.jar;E:

\\heritrix\\lib\\jetty-4.2.23.jar;E:

\\heritrix\\lib\\commons-net-1.4.1.jar;E:

\\heritrix\\lib\\libidn-0.5.9.jar;E:

\\heritrix\\lib\\ant-1.6.2.jar;E:

\\heritrix\\lib\\fastutil-5.0.3-heritrix-subset-1.0.jar;E:

\\heritrix\\lib\\je-3.0.12.jar;E:

\\heritrix\\lib\\commons-pool-1.3.jar;E:

\\heritrix\\lib\\jasper-runtime-tomcat-4.1.30.jar;E:

\\heritrix\\heritrix-1.10.1.jar"org.archive.crawler.Heritrix

(5)在上面的批处理文件中,将Heritrix所用到的所有的第三方Jar包都写进了classpath中,同时执行了org.archive.crawler.Heritrix这个主类。

图10-3为Heritrix启动时的画面。

图10-3 Heritrix的启动画面

(6)在这时,Heritrix的后台已经对服务器的8080端口进行了监听,只需要通过浏览器访问http:

//localhost:

8080,就可以打开Heritrix的WebUI了。

如图10-4所示。

图10-4 Heritrix的WebUI的登录界面

(7)在这个登录界面,输入刚才在Heritrix.properties中预设的WebUI的用户名和密码,就可以进入如图10-5所示的Heritrix的WebUI的主界面。

图10-5 登录后的界面

(8)当看到这个页面的时候,就说明Heritrix已经成功的启动了。

在页面的中央有一道状态栏,用于标识当前正在运行的抓取任务。

如图10-6所示:

图10-6 抓取任务的状态栏

在这个WebUI的帮助下,用户就可以开始使用Heritrix来抓取网页了。

10.1.2 在Eclipse里配置Heritrix的开发环境

讲完了通过命令行方式启动的Heritrix,当然要讲一下如何在Eclipse中配置Heritrix的开发环境,因为可能需要对代码进行调试,甚至修改一些它的源代码,来达到所需要的效果。

下面来研究一下Heritrix的下载包。

(1)webapps文件夹是用来提供Servlet引擎的,也就是提供Heritrix的WebUI的部分,因此,在构建开发环境时必不可少。

conf文件夹是用来提供配置文件的,因此也需要配置进入工程。

Lib目录下主要是Heritrix在运行时需要用到的第三方的软件,因此,需要将其设定到Eclipse的BuildPath下。

最后就是Heritrix的jar包了,将其解压,可以看到其内部的结构如图10-7所示。

图10-7 Heritrix的Jar包的结构

(2)根据图10-7所示,应该从Heritrix的源代码包中把这些内容取出,然后放置到工程中来。

Heritrix的源代码包解压后,只有两个文件夹,如图10-8所示。

图10-8 Heritrix的源代码包的结构

(3)只需在src目录下,把图10-7中的内容配全,就可以将工程的结构完整了。

如图10-9所示。

图10-9 src目录下的内容

(4)图10-10和图10-11是笔者机器上的Heritrix在Eclipse中的工程配置好后的截图,以及workspace中文件夹的预览。

 

图10-10 Eclipse工程视图下的包结构                  图10-11 文件夹中的工程

其中,org目录内是Heritrix的源代码,另外,笔者将conf目录去掉了,直接将heritrix.properties文件放在了工程目录下。

在图10-10中,读者可能没有看到Heritrix所使用到的Jar包,这是因为在工程视图中,它们被过滤器过滤掉了,实际上,所有lib目录下的jar包都已经被加进了buildpath中。

(5)不过,读者很有可能遇到这样的情况,那就是在将所有的jar包都导入后,工程编译完成,却发现在左边的packageexplorer中出现了大量的编译错误。

如图10-12所示。

图10-12 出现的编辑错误

(6)随便打开一个出错的文件,如图10-13所示,会发现大量的错误都来自于“assert”关键字。

这种写法似乎Eclipse不认识。

图10-13 出错的程序

(7)解决问题的关键在于,Eclipse的编译器不认识assert这个关键字。

可以在“选项”菜单中将编译器的语法样式改为5.0,也就是JDK1.5兼容的语法,然后重启编译整个工程就可以了。

如图10-14所示。

图10-14 改变编译器的语法等级

(8)在重新编译完整个工程后,笔者的Eclipse中仍然出现了一个编译错误,那就是在org.archive.io.ArchiveRecord类中,如图10-15所示。

图10-15 一个仍然存在的错误

从代码看来,这是因为在使用条件表达式,对strippedFileName这个String类型的对象赋值时,操作符的右则出现了一个char型的常量,因此影响了编译。

暂且不论为什么在Heritrix的源代码中会出现这样的错误,解决问题的办法就是将char变成String类型,即:

buffer.append(strippedFileName!

=null?

strippedFileName:

"-");

(9)当这样修改完后,整个工程的错误就被全部解决了,也就可以开始运行Heritrix了。

在Eclipse下运行org.archive.crawler.Heritrix类,如图10-16所示。

图10-16 在Eclipse中运行Heritrix

(10)当看到图10-17所示的界面时,就说明Heritrix已经成功的在Eclipse中运行,也就意味着可以使用Eclipse来对Heritrix进行断点调试和源码修改了。

图10-17 在Eclipse中成功的运行

10.1.3 创建一个新的抓取任务

在10.1.1小节中,已经看到了Heritrix成功运行后的WebUI,接下来,就要带领读者来创建一个新的抓取作务。

(1)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面。

如图10-18所示。

图10-18 菜单栏上的“Jobs”标签

(2)在任务创建页面中,有4种创建任务的方式,如图10-19所示,具体含义如下。

l Basedonexistingjob:

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

l Basedonarecovery:

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

l Basedonaprofile:

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

l Withdefaults:

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

图10-19 “任务”菜单中

在Heritrix中,一个任务对应一个描述文件。

这个描述文件的默认的名称为order.xml。

每次创建一个新任务时,都相当于生成了一个order.xml的文件。

文件中详细记录了Heritrix在运行时需要的所有信息。

例如,它包括该用户所选择的Processor类、Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。

上面所说的4种创建抓取任务的方式,其实都是在生成一个order.xml文件。

其中,第4种Withdefaults,则是直接拷贝默认的order.xml文件。

在所创建的Eclipse工程或是命令行启动的Heritrix下载包中,该默认的order.xml文件均是放于profiles\default目录下的。

关于order.xml的细节,在此还不必深究。

因为它里面所有的内容,都会在WebUI上看到。

(3)单击Withdefaults链接,创建一个新的抓取任务,如图10-20所示。

图10-20 新的抓取任务

(4)在新建任务的名称上,填入“Sohu_news”,表示该抓取任务将抓取搜狐的新闻信息。

在Description中随意填入字符,然后再在seeds框中,填入搜狐新闻的网址。

这里需要解释一下seeds的含义。

所谓seeds,其实指的是抓取任务的起始点。

每次的抓取,总是需要从一个起始点开始,在得到这个起始点网页上的信息后,分析出新的地址加入抓取队列中,然后循环抓取,重复这样的过程,直到所有链接都分析完毕。

(5)在图10-20中,设置了搜狐新闻的首页为种子页面,以此做为起始点。

用户在使用时,也可以同时输入多个种子,每个URL地址单独写在一行上,如图10-21所示。

图10-21 多个种子的情况

当然,凭着目前的设置,还没法开始抓取网页,还需要对这个任务进行详细的设置。

10.1.4 设置抓取时的处理链

在图10-21中,seeds文本框下有一排按钮,单击“Modules”按钮,就进入了配置抓取时的处理链的页面,如图10-22所示。

图10-22 配置处理链的页面

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

CrawlScope用于配置当前应该在什么范围内抓取网页链接。

比如,如果选择BroadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内。

从笔者的经验看来,在抓取时,无论是HostScope或PathScope都不能真正的限制到抓取的内容。

需要对Scope内的代码进行一定的修改才可以,因此,暂时选择BroadScope来充当示例中的范围限定,其实也就是对范围不做任何的限定。

即从开始,抓取任何可以抓取到的信息。

如图10-23所示。

图10-23 设置Scope

Frontier则是一个URL的处理器,它将决定下一个被处理的URL是什么。

同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。

在例子中,使用BdbFrontier类来做为处理器,全权掌管URL的分配。

如图10-24所示。

图10-24 设置Frontier

除了这两个组件外,还有5个队列要配。

这五个队列根据先后的顺序,就依次组成了Heritrix的整个处理器链。

5个队列的含义分别如下:

(1)PreProcessor:

这个队列中,所有的处理器都是用来对抓取时的一些先决条件做判断的。

比如判断robot.txt的信息等,它是整个处理器链的入口。

如图10-25所示。

图10-25 设置PreProcessor

(2)Fetcher:

从名称上看,它用于解析网络传输协议,比如解析DNS、HTTP或FTP等。

在演示中,主要使用FetchDNS和FetchHTTP两个类。

如图10-26所示。

图10-26 设置Fetcher

(3)Extractor:

它的名字就很好的揭示了它的作用。

它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。

在这个队列中,包括了一系列的工具,如解析HTML、CSS等。

在解析完毕,取出页面中的URL后,将它们放入队列中,等待下次继续抓取。

在演示中,使用两种Extractor,即ExtractorHTTP和ExtractorHTML。

如图10-27所示。

图10-27 设置Extractor

(4)Writer:

主要是用于将所抓取到的信息写入磁盘。

通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。

当然处理起来,镜象方式要更为容易一些,因此,在演示中命名用镜象Mirror方式。

如图10-28所示。

图10-28 设置Writer

(5)PostProcessor:

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

如图10-29所示。

图10-29 设置PostProcessor

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

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

10.1.5 设置运行时的参数

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

图10-30 进入“Settings”

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

图10-31 属性配置页面

由于页面上的内容非常多,使用者可能无法全部了解它们的作用。

所以Heritrix提供了一个辅助功能,来在最大程度上让使用者了解每个参数的含义。

如图10-32所示。

图10-32 属性提示

可以看到,在每个属性的右侧都有一个小问号,当单击问号时,就会弹出一个Javascript的Alert提示框,上面介绍了当前属性的作用。

例如,在上图中单击“max-bytes-download”属性,通过Alert的提示可以知道,它表示的是抓取器最大下载的字节数,当下载字节数超过这个属性上所设定的值时,抓取就会自动停止。

另外,如果将这个值设为0,则表示没有限制。

事实上,当在第一次使用Heritrix时,所需要设置的参数并不多,以默认设置为主。

以下就来介绍一些必须要在第一次使用时就要配置好的参数。

1.max-toe-threads

该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。

该参数的默认值为100,而事实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。

2.HTTP-Header

在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。

默认情况下,这两个属性的值如图10-33所示。

图10-33 默认的情况

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

图10-34是笔者机器上的一种配置,读者可以借鉴。

图10-34 一种正确的配置

l “@VERSION@”字符串需要被替换成Heritrix的版本信息。

l “PROJECT_URL_HERE”可以被替换成任何一个完整的URL地址。

l “from”属性中不需要设置真实的E-mail地址,只需是格式正确的邮件地址就可以了。

当正确设置了上述的两个属性后,Heritrix就具备了运行的条件。

单击“Submit”链接,提交这个抓取任务,如图10-35所示。

图10-35 提交任务“Submitjob”

10.1.6 运行抓取任务

(1)当单击“Submitjob”链接后,会看到图10-36所示的页面。

图中最上方很清楚的显示了“Jobcreated”,这表示刚才所设置的抓取任务已经被成功的建立。

同时,在下面的“PendingJobs”一栏,可以清楚的看到刚刚被创建的Job,它的状态目前为“Pending”。

图10-36 Job提交后的页面

(2)下面启动这个任务。

回到“Console”界面上,可以看到,如图10-37所示,刚刚创建的任务已经显示了出来,等待我们开始它。

图10-37 Job提交后的Console界面

(3)在面版的右测,它显示了当前Java虚拟机的一些状态,如图10-38所示,可以看到当前的堆大小为4184KB,而已经被使用了3806KB,另外,最大的堆内容可以达到65088KB,也就是在64M左右。

图10-38 内存状态显示

(4)此时,单击面版中的“Start”链接,就会将此时处于“Pending”状态的抓取任务激活,令其开始抓取

(5)在图10-39中,刚才还处于“Start”状态的链接已经变为了Hold状态。

这表明,抓取任务已经被激活。

图10-39 抓取开始

(6)此时,面版中出现了一条抓取状态栏,它清楚的显示了当前已经被抓取的链接数量,另外还有在队列中等待被抓取的链接数量,然后用一个百分比显示出来。

(7)在绿红相间的长条左侧,是几个实时的运行状态,其中包括抓取的平均速度(KB/s)和每秒钟抓取的链接数(URIs/sec),另外的统计还包括抓取任务所消耗的时间和剩余的时间,不过这种剩余时间一般都不准,因为URI的数量总是在不断变化,每当分析一个网页,就会有新的URI加入队列中。

如图10-40所示。

图10-40 抓取的速度和时间

(8)在绿红相间的长条右侧,是当前的负载,它显示了当前活跃的线程数量,同时,还统计了Heritrix内部的所有队列的平均长度。

如图10-41所示。

图10-41 线程和队列负载

(9)从图10-40和图10-41中看到,真正的抓取任务还没有开始,队列中的总URI数量,以及下载的速率都还基本为0。

这应该还处于接收种子URL的网页信息的阶段。

让我们再来看一下当Heritrix运行一段时间后,整个系统的资源消耗和进度情况。

(10)在图10-42中,清楚的看到系统的资源消耗。

其中,每秒下载的速率已经达到了23KB,另外,平均每秒有19.3个URI被抓取。

在负载方面,初设的50个线程均处于工作状态,最长的队列长度已经达到了415个URI,平均长度为5。

从进度条上看,总共有3771个URI等待抓取,已经完成了718个URI的抓取,另外,下载的字节总数也已经达到了1390KB。

再观察一下左边,仅用时32s。

可见,多线程抓取的速度还是很快的。

图10-42 系统运行一段时间后的情况

(11)不过,当抓取继续进行时,观察Java虚拟机的内存使用,发现其已达饱合状态。

64M的最大Heap显然不够用。

如图10-43所示。

图10-43 Java虚拟机的内存使用

(12)由于这仅是一次演示,可以忽略内存的影响。

但在真正的开发过程中,使用Heritrix时,至少应为其分配512M的最大HeapSize,也就是在启动它时,应该设置-Xmx512m这个属性。

在使用命令行方式启动Heritrix的脚本中,笔者已

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1