Heritrix爬虫 ----(1)安装配置和基本使用

Heritrix1.14.4安装配置和使用

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

一、在myeclipse中安装配置Heritrix

heritrix1.14.4源码包下载: https://download.csdn.net/download/wd153263008/10623140

  1. 在myeclipse中安装配置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
  1. 找到org.archive.crawler包,运行Heritrix.java中的main函数;

二、可能会出现的异常

  • 在Heritrix.java中出现 File URLConnection 红叉 :

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

  • 出现的异常 : ......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的正确结果如下:


image.png

三、运行Heritrix

(1)登录并创建一个简单的job

打开浏览器,输入 http://localhost:8080,进入heritrix的登录页面。点击Login按钮后进入heritrix的控制台界面

image.png

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

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


image.png

(2)创建一个Job

image.png

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

  • Based on existing job:以一个已经有的抓取任务为模板,创建所有抓取属性和抓取起始URL的列表。
  • Based on a recovery:在以前的某个任务中,可能设置过一些状态点,新的任务将从这个设置的状态点开始。
  • Based on a profile:专门为不同的任务设置了一些模板,新建的任务将按照模板来生成。
  • With defaults:这个最简单,表示按默认的配置来生成一个任务。

点击选择最简单的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目录下的。


image.png

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

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

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

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


image.png

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

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

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

image.png

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

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

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


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


    image.png

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

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


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


    image.png
  3. Extractor:它的名字就很好的揭示了它的作用。它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。在这个队列中,包括了一系列的工具,如解析HTML、CSS等。在解析完毕,取出页面中的URL后,将它们放入队列中,等待下次继续抓取。在演示中,使用两种Extractor,即ExtractorHTTP和ExtractorHTML。
  4. Writer:主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些,因此,我们命名用镜象Mirror方式。


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

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

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

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

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


image.png

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


image.png

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


image.png

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

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

  • max-toes-threads:该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。该参数的默认值为100,而事实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。
  • HTTP-Header:在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。默认情况下,这两个属性的值如下图。


    image.png

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


    image.png

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

(5)完成Job的创建

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


image.png

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


image.png

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

(6)启动Job,抓取网页

点击“Console”按钮回到Console界面,可以看到刚刚创建的任务已经启动了。点击"Start"按钮,“Pending”状态的抓取任务激活,开始抓取网页。


image.png

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


image.png

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

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

(7)Heritrix的镜像存储结构

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

image.png

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

http://blog.sina.com.cn/index.html

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

(8)停止抓取任务

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

  1. 正常终止
    第一种方法当然就是任务的自然结束,其条件为所有队列中的URI都已经被处理过了。此时,任务将自然终止。在“Jobs”面版上会看到任务已经完成,被加入到“Completed jobs”列表中。
  2. 强行终止
    当然,任务不可能总是运行完,这可能是因为对任务的控制不够,结果抓取了太多不相关的信息,进而造成URL队列无限制膨胀,无法终止。在这种情况下,就需要强行将任务终止。在Console面版上有如下图所示的一排链接,最后一个“Terminate”链接,就是用来终止当前运行的任务。


    image.png

    单击“Terminate”链接后,当前在运行的抓取任务就会立即终止,并同样将任务放置到“Jobs”面版上的“Completed jobs”列表中,只不过在“status”上,它会显示“Finished - Ended by operator”这样的提示。
    当然,如果用户希望关闭Heritrix,并终止所有正在运行的任务,也可以单击Console面版上的“Shutdown Heritrix software”的链接,此时,Heritrix会弹出一个警告,告诉你如果关闭Heritrix,则当前一切正在运行的任务都将被终止。如下图所示。


    image.png

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

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352