学习研究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的部分源码分析及扩展,改造成自己想要的爬虫。欢迎各位博友们拍砖交流,指点接下来的研究线路!

Heritrix1.14.4安装配置和使用相关推荐

  1. linux 14.04安装方法,Ubuntu 14.04 安装配置GNOME经典界面

    Ubuntu 14.04上基本完美支持GNOME经典界面,安装配置步骤如下: 1. 安装gnome-session-flashback sudo apt-get install gnome-sessi ...

  2. Ubuntu 14.04 安装配置备忘录

    完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年 ...

  3. Ubuntu 14.04安装配置Calamari

    操作系统安装 --省略-- 配置服务器信任 --省略-- Calamari服务端部署 1. 配置ubuntu默认仓库为阿里云镜像库 deb http://mirrors.aliyun.com/ubun ...

  4. mysql5.7.14_mysql 5.7.14 下载安装配置方法图文教程

    如何下载最新版本的MySQL? 进入此界面下载: Downloads–>MySQL Community Edition (GPL)(这是免费版的,当然,有钱的可以用收费的,功能更强大)–> ...

  5. Ubuntu 14.04 安装配置 cairo-dock 实现美化+特效

    Cairo-Dock is a desktop interface that takes the shape of docks, desklets, panel, etc. 它可以让桌面下方显示一排应 ...

  6. Ubuntu 14.04 安装配置 JDK8

    1.从Oracle官网下载jdk 2.解压文件 $ sudo mkdir /usr/lib/jvm $ sudo mv jdk-8u5-linux-i586.tar.gz /usr/lib/jvm/ ...

  7. ubuntu kylin 14.04安装配置redis-2.8.9(转)

    1.下载安装文件加压.编译和安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.9.tar.gz tar -zxf redis-2. ...

  8. Ubuntu 14.04+cuda 7.5+caffe安装配置

    换了新电脑,整个人喜气洋洋,然后就屁颠屁颠地开始配置caffe的使用环境. 可是!!!配置这个坑爹的caffe环境让我重装系统N次加上重装cudaN次,后来发现有好多都是很琐碎的注意事项,好多人都没有 ...

  9. Ubuntu 14.04安装JDK1.8.0_25与配置环境变量

    Ubuntu 14.04安装JDK1.8.0_25与配置环境变量 [日期:2015-01-19]     来源:Linux社区  作者:lizhangyong1989     [字体:大 中 小] 以 ...

最新文章

  1. python怎么画形状_python – matplotlib – 如何绘制随机导向的矩形(或任何形状)?...
  2. 从Altium Designer导出PCB的3D模型至Solidworks
  3. git学习六:git提交忽略不必要的文件或文件夹
  4. 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
  5. 3-7:类与对象下篇——static成员
  6. ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
  7. 总结-变量命名变量提升运算符判断函数数组对象数据类型
  8. C++使用万能头文件报错
  9. linux重启tomcat命令
  10. chrome os 安装java_Debian下chrome支持运行Java小程序
  11. LiveData setValue和postValue源码解析
  12. UE4路径跟随插件使用文档
  13. 北京CMMB信号ESG的Schedule据文件--8月份数据
  14. mybatispuls中IService查询条件的使用(适用于单表查)
  15. 坑!阿里云对象存储OSS收费细则不只是存储还有其他扣费项
  16. 【顺序表】顺序表的就地逆置
  17. Html5中文显示乱码
  18. 手把手教你如何实现一个简单的数据加密算法
  19. Stm32完整安装包,包含Keil5,野火大学堂,Flymcu,Ch340,stm32F1和F4的器件支持包,STM32CubeMX
  20. ctf-web-No one knows regex better than me

热门文章

  1. 【chrome devtools】前端性能分析之chrome devtools的使用 前端项目内存性能优化的建议 前端浏览器崩溃卡死 前端性能分析实战
  2. 原生js通过canvas和cssRules实现图片分割与重组
  3. 【SQL】order by 分页排序
  4. 8位, 16位,24位,32位图片显示原理及对比
  5. bfs优化技巧——键盘输入
  6. 剩余极化强度、电滞回线、饱和极化强度
  7. python的几个有趣点
  8. stream.allMatch
  9. 三体中的思想实验一:地球往事
  10. 《你是我的小羊驼》游戏源码 v1.0