欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    [计算机软件及应用]Heritrix144安装配置使用手册.doc

    • 资源ID:4561546       资源大小:551.50KB        全文页数:46页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [计算机软件及应用]Heritrix144安装配置使用手册.doc

    Heritrix的配置及安装使用 首先得下载Heritrix包。        下载最新版的heritrix1.14.4.zip和heritrix-1.14.4-src.zip。地址: 一、 安装、配置Heritrix     1、将得到的heritrix-1.14.4.zip压缩包直接解压缩到某一目录,我选择的是F:Heritrix。     2、然后,将 F:Heritrix 目录中的heritrix-1.14.4.jar文件解压缩,把 profilesdefault 下的两个文件order.xml和seeds.txt复制到 F:Heritrixconf 目录下。     3、以文本编辑方式打开 F:Heritrixconf 下的heritrix.properties文件,在“heritrix.cmdline.admin = ” 项的后面加入你所要设定的管理员账户和密码,用“:”分割,如:           heritrix.cmdline.admin = admin:admin     4、复制 F:Heritrixconf 下的jmxremote.password.template文件到主目录F:Heritrix下,并更名为jmxremote.password。编辑此文件,           更改最后两行"monitorRole PASSWORD"、"controlRole        PASSWORD"中的"PASSWORD"为管理员密码。如:                  monitorRole admin                  controlRole admin    如果顺利,就可以运行了。系统自带脚本的运行如下:           将cmd定位到 F:heritrixbin下,执行 "heritrix -admin=admin:admin" 命令,即可启动 heritrix,      有一点需要注意,heritrix默认使用8080端口,要保证系统端口没有冲突。之后便可以访问 http:/127.0.0.1:8080 或http:/localhost:8080/ 使用 heritrix 提供的WUI,即Web管理端。并且使用"admin/admin"登录。   可能会出现的异常:            其中在Heritrix有一条异常信息是:java.lang.ClassNotFoundException:org.archive.crawler.Heritrix.              在Dos下可能是这样显示:JMX password file is missing or permission not set correctly.            原因是,heritrix启动时找不到heritrix的.Jar 包,即heritrix-1.14.4.jar。你就要看你的F:/Heritrix下有没有这个包,没有就加上,基本上是有的。  有的话,就要看你的环境变量中是不是设置了HERITRIX_HOME环境变量,如   果有,把它删除就解决了。    其它情况我没有遇到,就不写了。 二、在Eclipse中配置Heritrix         1、新建空的java项目(注意不是WEB项目),命名为heritrix;        2、把heritrix-1.14.4-srcsrcjava目录下的org、st和com文件夹拷贝到heritrix/src目录下;        3、把heritrix-1.14.4-srcsrc下的wbapps文件夹拷贝到heritrix目录下;        4、右击heritrix项目,点击properties ,通过JavaBuildPath,将heritrix-1.14.4-src下的lib目录下的所有包导入进来;        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文件夹移入conf文件夹中;        7、打开eclipse下的heritrix/conf/heritrix.properties文件,找到"heritrix.cmdline.admin=",修改为“heritrix.cmdline.admin = admin:admin”;        8、Conf/jmxremote.password.template拷贝到heritrix目录下。改名为:jmxremote.password,最后再行改成:                              monitorRole  admin                              controlRole    admin admin为设置的WEBUI的密码        9、找到org.archive.crawler包,运行Heritrix.java中的main函数。           成功提示信息为:           09:14:07.406 EVENT  Starting Jetty/4.2.23            09:14:07.656 EVENT  Started WebApplicationContext/,Heritrix Console            09:14:07.750 EVENT  Started SocketListener on 127.0.0.1:8082            09:14:07.750 EVENT  Started org.mortbay.jetty.Server179c285           Heritrix version: 1.14.4          可能会出现的异常:          1、在Heritrix.java中出现File URLConnection 红叉;               解决办法:将myeclipse中的compiler 属性中的Errors/warring 中的Forbidden.选为warrning即可。          2、出现的异常:.thread-10 org.archive.util.ArchiveUtils.<linit>( )TLD list.              解决办法:将 heritrix-1.14.4-srcheritrix-1.14.4srcresourcesorgarchiveutil 下的文本文档拷贝到heritrix中的orgarchiveutil下;          3、在eclipse中可以启动heritrix,但在jobs->modules.jsp页面中没有添加(“Add”)按扭,且出现以下异常。              致使错误:“无法编译样式表”              严重 thread-12 org.archive'crawler.framework.WriterPodProcessor.io.arc.              解决办法:将heritrix 项目中的modulse的上一级目录文件添加到eclipse的classpath中。创建一个新的抓取任务(1)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面。如图10-18所示。(2)在任务创建页面中,有4种创建任务的方式,如图10-19所示,具体含义如下。l  Based on existing job:以一个已经有的抓取任务为模板,创建所有抓取属性和抓取起始URL的列表。l  Based on a recovery:在以前的某个任务中,可能设置过一些状态点,新的任务将从这个设置的状态点开始。l  Based on a profile:专门为不同的任务设置了一些模板,新建的任务将按照模板来生成。l  With defaults:这个最简单,表示按默认的配置来生成一个任务。在Heritrix中,一个任务对应一个描述文件。这个描述文件的默认的名称为order.xml。每次创建一个新任务时,都相当于生成了一个order.xml的文件。文件中详细记录了Heritrix在运行时需要的所有信息。例如,它包括该用户所选择的Processor类、Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。上面所说的4种创建抓取任务的方式,其实都是在生成一个order.xml文件。其中,第4种With defaults,则是直接拷贝默认的order.xml文件。在所创建的Eclipse工程或是命令行启动的Heritrix下载包中,该默认的order.xml文件均是放于profilesdefault目录下的。关于order.xml的细节,在此还不必深究。因为它里面所有的内容,都会在WebUI上看到。(3)单击With defaults链接,创建一个新的抓取任务,如图所示。(4)在新建任务的名称上,填入“Sohu_news”,表示该抓取任务将抓取搜狐的新闻信息。在Description中随意填入字符,然后再在seeds框中,填入搜狐新闻的网址。这里需要解释一下seeds的含义。所谓seeds,其实指的是抓取任务的起始点。每次的抓取,总是需要从一个起始点开始,在得到这个起始点网页上的信息后,分析出新的地址加入抓取队列中,然后循环抓取,重复这样的过程,直到所有链接都分析完毕。(5)在上图中,设置了搜狐新闻的首页为种子页面,以此做为起始点。用户在使用时,也可以同时输入多个种子,每个URL地址单独写在一行上,如图所示。图10-21  多个种子的情况当然,凭着目前的设置,还没法开始抓取网页,还需要对这个任务进行详细的设置。设置抓取时的处理链在上图中,seeds文本框下有一排按钮,单击“Modules”按钮,就进入了配置抓取时的处理链的页面下图所示。图10-22  配置处理链的页面从上而下,可以看到,需要配置的内容共有7项,其中CrawlScope和Frontier是两个最重要的组件。CrawlScope用于配置当前应该在什么范围内抓取网页链接。比如,如果选择BroadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内。从笔者的经验看来,在抓取时,无论是HostScope或PathScope都不能真正的限制到抓取的内容。需要对Scope内的代码进行一定的修改才可以,因此,暂时选择BroadScope来充当示例中的范围限定,其实也就是对范围不做任何的限定。即从开始,抓取任何可以抓取到的信息。如图10-23所示。图10-23  设置ScopeFrontier则是一个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时,所需要设置的参数并不多,以默认设置为主。以下就来介绍一些必须要在第一次使用时就要配置好的参数。1max-toe-threads该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。该参数的默认值为100,而事实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。2HTTP-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  提交任务“Submit job”10.1.6  运行抓取任务(1)当单击“Submit job”链接后,会看到图10-36所示的页面。图中最上方很清楚的显示了“Job created”,这表示刚才所设置的抓取任务已经被成功的建立。同时,在下面的“Pending Jobs”一栏,可以清楚的看到刚刚被创建的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的脚本中,笔者已经为其加入了该参数,而如果要在使用Eclipse启动Heritrix时也设置该参数,具体的设置方法如图10-44所示。图10-44  在Eclipse中加入启动参数(13)按图10-44所示,输入Java虚拟机的参数,就可以增大Heritrix的最大可用内存。如图10-45是使用了-Xmx512m参数后的Console界面。图10-45  使用了512m的HeapSize在运行的过程中,值得注意的一点是,进度条的百分比数量并不是准确的。因为这个百分比实际上是已经处理的链接数和总共分析出的链接数的比值。当页面在不断被抓取分析时,链接的数量也会不断的增加,因此,这个百分比的数字也在不断的变化。例如如图10-46所示,此时总共抓取到的链接数已经达到了12280个,处理了799个,它的百分比数量为6%,这显然比图10-42或图10-39中的要小。图10-46  抓取了799的链接读者可能已经发现,在Heritrix中,大量的链接被称为URI。从理论上说,URL应该是一个完整的地址,而URI应该是去除协议、主机和端口后剩余的部分。Heritrix中可能有一定程度的混淆,希望读者不要对此感到奇怪。至此,已经把Heritrix成功的运行起来,并且抓取了一定的内容。接下来,看一下它是如何存储抓取下来的信息的。10.1.7  Heritrix的镜象存储结构由于在前面设置了Writer的类型为MirrorWriter。因此,磁盘上应该留有了所抓取到的网页的各种镜象。那么,究竟Heritrix是如何存储下镜象信息的呢?打开Eclipse的workspace目录,进入heritrixProject的工程,里面有一个jobs目录。进入后,找到以刚才job的名称打头的文件夹,这里面的内容,就是Heritrix在运行时实时生成的。其中,有一个mirror目录,进入后,如图10-47所示。图10-47  mirror目录下的内容其实所谓镜象方式存储,就是将URL地址按“/”进行切分,进而按切分出来的层次存储,比如一个URL地址为:那么它在mirror目录中的保存位置就该是目录下的index.html文件。为了验证这一说法的准确性,打开目录,可以看到图10-48。图10-48  镜象示例果然,index.html文件就在这个目录下。另外,Heritrix也同样将各种图片或脚本信息按路径进行了保存,例如,在目录下有一个images目录,其中就保存了URL地址如图10-49  抓取下来的图片文件10.1.8  终止抓取或终止Heritrix的运行当用户进行某个抓取任务时,有两种方法会让任务停止下来。1正常终止第一种方法当然就是任务的自然结束,其条件为所有队列中的URI都已经被处理过了。此时,任务将自然终止。在“Jobs”面版上会看到任务已经完成,被加入到“Completed jobs”列表中。2强行终止当然,任务不可能总是运行完,这可能是因为对任务的控制不够,结果抓取了太多不相关的信息,进而造成URL队列无限制膨胀,无法终止。在这种情况下,就需要强行将任务终止。在Console面版上有如图10-50所示的一排链接,最后一个“Terminate”链接,就是用来终止当前运行的任务。图10-50  终止任务的运行单击“Terminate”链接后,当前在运行的抓取任务就会立即终止,并同样将任务放置到“Jobs”面版上的“Completed jobs”列表中,只不过在“status”上,它会显示“Finished - Ended by operator”这样的提示。当然,如果用户希望关闭Heritrix,并终止所有正在运行的任务,也可以单击Console面版上的“Shutdown Heritrix software”的链接,此时,Heritrix会弹出一个警告,告诉你如果关闭Heritrix,则当前一切正在运行的任务都将被终止。如图10-51所示。图10-51  关闭前的提示如果选择“Im sure, shut it down”,则Heritrix的WebUI将会终止,虚拟机进程结束。10.2  Heritrix的架构在上一节中,详细介绍了Heritrix的使用入门。读者通过上一节的介绍,应该已经能够使用Heritrix来进行简单的网页抓取了。那么,Heritrix的内容究竟是如何工作的呢?它的设计方面有什么突出之处?本节就将介绍Heritrix的几个主要组件,以此让读者了解其主要架构和工作方式。为后续的扩展Heritrix做一些铺垫。10.2.1  抓取任务CrawlOrder之所以选择从CrawlOrder这个类说起,是因为它是整个抓取工作的起点。在上一节中已经说过,一次抓取任务包括许多的属性,建立一个任务的方式有很多种,最简单的一种就是根据默认的order.xml来配置。在内存中,order使用CrawlOrder这个类来进行表示。看一下API文档中CrawlOrder的继承关系图,如图10-52所示。图10-52  CrawlOrder类的继承关系图从继承关系图中可以看到,CrawlOrder继承自一系列的与属性设置相关的基类。另外,它的最顶层基类是javax.management.Attribute,这是一个JMX中的类,它可以动态的反映出Java容器内某个MBean的属性变化。关于这一部分的内容不是我们所要讨论的重点,只需知道,CrawlOrder中的属性,是需要被随时读取和监测的。那么究竟使用什么工具来读取order.xml文件中的各种属性呢。另外,一个CrawlOrder的对象又该如何构建呢?Heritrix提供了很好的工具支持对于order.xml的读取。在org.archive.crawler.settings包下有一个XMLSettingsHandler类,它可以用来帮助读取order.xml。public XMLSettingsHandler(File orderFile) throws InvalidAttributeValueException在XMLSettingsHandler的构造函数中,其所传入的参数orderFile正是一个经过对象封装的order.xml的File。这样,就可以直接调用其构造函数,来创建一个XMLSettingsHandler的实例,以此做为一个读取order.xml的工具。当一个XMLSettingsHandler的实例被创建后,可以通过getOrder()方法来获取CrawlOrder的实例,这样也就可以进行下一步的工作了。10.2.2  中央控制器CrawlController中央控制器是一次抓取任务中的核心组件。它将决定整个抓取任务的开始和结束。CrawlController位于org.archive.crawler.framework中,在它的Field声明中,看到如下代码片段。代码10.2/ key subcomponents which define and implement a crawl in progressprivate transient CrawlOrder order;private transient CrawlScope scope;private transient ProcessorChainList processorChains;private transient Frontier frontier;private transient ToePool toePool;private transient ServerCache serverCache;/ This gets passed into the initialize method.private transient SettingsHandler settingsHandler;可以看到,在CrawlController类中,定义了以下几个组件:l  CrawlOrder:这就不用说了,因为一个抓取工作必须要有一个Order对象,它保存了对该次抓取任务中,order.xml的属性配置。l  CrawlScope:在10.1.4节中已经介绍过了,这是决定当前的抓取范围的一个组件。l  ProcessorChainList:从名称上很明显就能看出,它表示了处理器链,在这个列表中的每一项都可以和10.1.4节中所介绍的处理器链对应上。l  Frontier:很明显,一次抓取任务需要设定一个Frontier,以此来不断为其每个线程提供URI。l  ToePool:这是一个线程池,它管理了所有该抓取任务所创建的子线程。l  ServerCache:这是一个缓存,它保存了所有在当前任务中,抓取过的Host名称和Server名称。以上组件应该是一次正常的抓取过程中所必需的几项,它们各自的任务很独立,分工明确,但在后台中,它们之间却有着千丝万缕的联系,彼此互相做为构造函数或初始化的参数传入。那么,究竟该如何获得CrawlController的实例,并且通过自主的编程来使用Heritrix提供的API进行一次抓任务呢?事实上CrawlController有一个不带参数的构造函数,开发者可以直接通过它的构造函数来构造一个CrawlController的实例。但是值得注意的一点,在构造一个实例并进行抓取任务时,有几个步骤需要完成:(1)首先构造一个XMLSettingsHandler对象,将order.xml内的属性信息装入。(2)调用CrawlController的构造函数,构造一个CrawlController的实例。(3)调用CrawlController的intialize(SettingsHandler)方法,初始化CrawlController实例。其中,传入的参数是在第一步是构造的XMLSettingsHandler实例。(4)当上述3步完成后,CrawlController就已经具备运行的条件,可以开始运行了。此时,只需调用它的requestCrawlStart()方法,就可以启运线程池和Frontier,然后就可以开始不断的抓取网页了。上述过程可以用图10-53所示。图10-53  使用CrawlController启运抓取任务在CrawlController的initialize()方法中,Heritrix主要做了以下几件事:(1)从XMLSettingsHandler中取出Order。(2)检查了用户设定的UserAgent等信息,看是否符合格式。(3)设定了开始抓取后保存文件信息的目录结构。(4)初始化了日志信息的记录工具。(5)初始化了使用Berkley DB的一些工具。(6)初始化了Scope、Frontier以及ProcessorChain。(7)最后实例化了线程池。在正常情况下,以上顺序不能够被随意变动,因为后一项功能的初始化很有可能需要前几项功能初始化的结果。例如线程池的初始化,必须要在先有了Frontier的实例的基础上来进行。读者可能对其中的Berkeley DB感到费解,在后面的小节将详细说明。从图10-53中看到,最终启动抓取工作的是requestCrawlStart()方法。其代码如下。代码10.3public void requestCrawlStart()     / 初始化处理器链    runProcessorInitialTasks();    / 设置一下抓取状态的改变,以便能够激发一些Listeners    / 来处理相应的事件    sendCrawlStateChangeEvent(STARTED, CrawlJob.STATUS_PENDING);    String jobState;    state = RUNNING;    jobState = CrawlJob.STATUS_RUNNING;    sendCrawlStateChangeEvent(this.state, jobState);    / A proper exit will change this value.    this.sExit = CrawlJob.STATUS_FINISHED_ABNORMAL;    / 开始日志线程    Thread statLogger = new Thread(statistics);    statLogger.setName("StatLogger");    statLogger.start();    / 启运Frontier,抓取工作开始    frontier.start();可以看到,启动抓取工作的核心就是要启动Frontier(通过调用其start()方法),以便能够开始向线程池中的工作线程提供URI,供它们抓取。下面的代码就是BdbFrontier的父类AbstractFrontier中的start()方法和unpause()方法:代码10.4public void start()     if (Boolean)getUncheckedAttribute(null, ATTR_PAUSE_AT_START).booleanValue()     / 若配置文件中不允许该次抓取开始    / 则停止        controller.requestCrawlPause();    else     / 若允许开始,则开始        unpause();    synchronized public void unpause()     / 去除当前阻塞变量    shouldPause = false;    / 唤醒所有阻塞线程,开始抓取任务    notifyAll();在start()方法中,首先判断配置中的属性是否允许当前线程开始。若不允许,则令controller停止抓取。若允许开始,则简单的调用unpause()方法。unpause()方法更为简单,它首先将阻塞线程的信号量设为false,即允许线程开始活动,然后通过notifyAll()方法,唤醒线程池中所有被阻塞的线程,开始抓取。10.2.3  Frontier链接制造工厂Frontier在英文中的意思是“前线,领域”,在Heritrix中,它表示一种为线程提供链接的工具。它通过一些特定的算法来决定哪个链接将接下来被送入处理器链中,同时,它本身也负责一定的日志和状态报告功能。事实上,要写出一个合格并且真正能够使用的Frontier绝非一件简单的事情,

    注意事项

    本文([计算机软件及应用]Heritrix144安装配置使用手册.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开