Heritrix爬虫说明

  1. 概述

安装部署好的Heritrix爬虫总共有28个jar包(不包括系统jar包)。关于Heritrix的安装配置及使用方法在文档末尾给出网址链接。在Eclipse中安装配置完成后,运行Heritrix.java启动爬虫,在浏览器地址栏中输入:localhost:8080进入UI任务创建、参数配置界面进行各项操作。

  1. 类包说明

  1. 1包说明

序号

包名

说明

1

org.apache.commons.httpclient

封装了apache的httpclient用于Fetch网页内容

2

org.apache.commons.httpclient.cookie

封装了apache的httpclient用于Fetch网页内容,这里主要处理Cookie

3

org.apache.commons.pool.impl

封装了apache的httpclient用于Fetch网页内容,还待研究

4

org.archive.crawler

Heritrix程序运行的入口包,如Heritrix运行可以直接抓取

5

org.archive.crawler.admin

Heritrix的管理包,比如CrawlJob表示一个抓取任务job,CrawlJobHandler管理JOB,以及日志统计等

6

org.archive.crawler.admin.ui

服务于UI管理界面,如Job参数的设置

7

org.archive.crawler.datamodel

Heritrix的数据模型包,如在Heritrix中代表一个URL的CandidateURI

8

org.archive.crawler.datamodel.credential

管理Heritrix数据模型中的凭证,如抓取某些网站需要用户名和密码

9

org.archive.crawler.deciderules

Heritrix的规则包,如决定哪些URL可以抓取可以调度

10

org.archive.crawler.deciderules.recrawl

还待研究,应该是决定哪些URL需要重新抓取

11

org.archive.crawler.event

事件管理,如Heritrix的暂停、重启、停止等

12

org.archive.crawler.extractor

Heritrix的造血器,通过它抽取新的URL再次进行抓取

13

org.archive.crawler.fetcher

Heritrix的获取包,如获取HTTP、DNS、FTP数据

14

org.archive.crawler.filter

Heritrix的过滤器,如配合Rule过滤一些不要的URL

15

org.archive.crawler.framework

Heritrix的框架包,存放一些核心类,一般是父类,如Heritrix控制类CrawlController;调度器类Frontier

16

org.archive.crawler.framework.exceptions

Heritrix框架异常包,通常这里的异常抛出会导致Heritrix的停止

17

org.archive.crawler.frontier

Heritrix的调度器,决定抓取哪个URL

18

org.archive.crawler.io

Heritrix的IO格式包,感觉取名不合理,这里只是定义一些格式,如统计数据的格式,错误日志的格式

19

org.archive.crawler.postprocessor

辅助处理器包,感觉取名也不合理,这里只是对处理URL前后进行一些处理,如URL重定向

20

org.archive.crawler.prefetch

Heritrix的预处理器包,如确定一个URL是否已经解析了DNS

21

org.archive.crawler.processor

Heritrix处理器

22

org.archive.crawler.processor.recrawl

23

org.archive.crawler.scope

Heritrix抓取范围管理,如种子

24

org.archive.crawler.selftest

管理Heritrix的Web工程self.war

25

org.archive.crawler.settings

管理Heritrix配置文件order.xml中的各项配置

26

org.archive.crawler.settings.refinements

管理Heritrix自己对数据格式的标准,如时间格式

27

org.archive.crawler.url

还没怎么接触到,待研究

28

org.archive.crawler.url.canonicalize

Heritrix的URL规范化,用于规范每一个URL

29

org.archive.crawler.util

Heritrix用于抓取的工具包,如BDB操作工具,IO操作工具

30

org.archive.crawler.writer

Heritrix的下载包,用于将抓取的URL内容写入硬盘

31

org.archive.extractor

还没接触到,待研究

32

org.archive.httpclient

Heritrix为结合httpclient量身打造的包,让自身更好的获取网页内容

33

org.archive.io

Heritrix的IO包,自己封装的一些IO操作类

34

org.archive.io.arc

针对arc格式的IO操作包

35

org.archive.io.warc

针对warc格式的IO操作包

36

org.archive.net

Heritrix扩展了java.net的包,主要扩展java.net.URI类

37

org.archive.net.md5

Heritrix对URL MD5加密包,所用不多,待研究

38

org.archive.net.rsync

待研究

39

org.archive.net.s3

待研究

40

org.archive.queue

待研究

41

org.archive.uid

Heritrix ID管理,主要针对URI

42

org.archive.util

整个Heritrix的工具类

43

org.archive.util.anvl

待研究

44

org.archive.util.bdbje

Heritrix对BDB的封装

45

org.archive.util.fingerprint

待研究

46

org.archive.util.iterator

Heritrix自身封装的迭代器

47

org.archive.util.ms

待研究

48

st.ata.util

扩展的其他包,待研究

  1. 2 类说明

2.2.1org.archive.crawler包

序号

说明

1

CommandLineParser

Heritrix也可以通过CMD命令进行操作,该类用于解析CMD命令

2

Heritrix

Heritrix主类,可以通过该类启动Heritrix

3

SimpleHttpServer

Heritrix Web服务器,可以通过Web管理Heritrix

4

WebappLifecycle

封装Servlet,如此才可以通过Web启动Heritrix,里面封装Heritrix对象

2.2.2org.archive.crawler.admin包

序号

说明

1

CrawlJob

Heritrix的核心类,代表着一个抓取任务,order.xml中大部分属性都围绕其配置。

2

CrawlJobErrorHandler

维护着一个抓取任务(CrawlJob)的错误日志,UI中显示的JOB错误就来自于它。

3

CrawlJobHandler

抓取任务处理器,Heritrix可以有多个抓取任务,都由它管理

4

InvalidJobFileException

抓取任务文件异常,意义不大

5

SeedRecord

记录种子的处理记录,如该种子重定向到哪个URL,在seeds.txt里面会有说明,该重定向值就来源于它

6

StaticsSummary

统计摘要类,所用不多

7

StaticsTracker

Heritrix核心类,统计跟踪器,贯穿整个Heritrix的运行,如统计抓取了多少URL。

2.2.3 org.archive.crawler.admin.ui包

序号

说明

1

CookieUtils

Cookie工具类,主要用于访问Cookie

2

JobConfigureUtils

CrawlJob配置管理工具类,当你通过Web Ui去配置一个CrawlJob时就会用到这个类

3

RootFilter

2.2.4 org.archive.crawler.datamodel包

序号

说明

1

CandidateURI

Heritrix的核心类,代表着一个URL,贯穿整个抓取,与CrawlURI的区别是它还没有调度器(Frontier),只有通过了调度器的URL才可能去获取网页内容下载等

2

CandidateURITest

CandidateURI的测试类,比如可以用它获知如何创建CanditeURI

3

Checkpoint

Heritrix会定期备份它的数据,如日志、正在获取的URL内容,都是在底层定时运行,当Heritrix异常中断可以通过它来恢复,也类似于各个数据库的Checkpoint

4

CoreAttributeCostants

装载着Heritrix的基本属性变量名,一般是对应order.xml中的标签名

5

CrawlHost

Heritrix的核心类,代表着一个Host,里面主要包含域名、IP。由于Heritrix可以控制抓取速度,如对一个Host的抓取速度,这个类就代表着那个Host

6

CrawlOrder

Heritrix的核心类,基本上对应着order.xml的各个属性值,除了各个组件的详细属性

7

CrawlServer

Heritrix的核心类,也对应着一个Host,里面装载着一个Host的各种Heritrix数据,如统计信息、爬虫协议

8

CrawlSubstats

抓取统计类,主要统计抓取url的个数、成功的个数、下载的字节数等等呢

9

CrawlURI

CandidateURI的子类,主要比CaidiateURI多了网页内容指纹、所属队列、组件处理器等

10

CredentialStore

凭证存储类,负责存储各种凭证,如登录

11

FetchStatusCodes

抓取状态,有不同的属性代表不同的抓取状态,如DNS获取成功:S_DNS_SUCCESS

12

RobotsHonoringPolicy

爬虫协议,代表着不同的抓取策略

13

Robotstxt

爬虫协议,用于解析robots.txt

14

ServerCache

服务器缓存,主要缓存CrawlHost和CrawlServer

15

UriUniqFilter

接口,用于过滤已经抓取过的URL

2.2.5 org.archive.crawler.datamodel.credential包

序号

说明

1

Credential

凭证类,代表着一个凭证,从order.xml配置文件中获取数据

2

CredentialAvatar

代表着一个具体的凭证

3

HtmlFormCredential

Credential的子类,代表着提交HTML FORM表单时所需要的凭证

4

Rfc2617Credential

Credential的子类,代表着RFC2617 HTTP 认证凭证

2.2.6 org.archive.crawler.deciderules包

序号

说明

1

AcceptDecideRule

URL规则,表示接受

2

ConfiguredDecideRule

URL规则,通过order.xml文件中的配置来决定是否拒绝(REJECT)或接受(ACCEPT)

3

DecideRule

URL规则的父类,审核一个URL是否接受(ACCEPT)、拒绝(REJECT)或放弃(PASS),通过decisionFor(Object object)方法,该方法由其子类实现

4

DecidingScope

验证一个URL是否在范围来决定是否接受、拒绝或放弃

5

MatchesRegExpDecideRule

通过配置的正则表达式来决定URL是否可接受、拒绝或放弃

6

NotMatchesRegExpDecideRule

MatchesRegExpDecideRule的子类,如果URL不匹配该正则则接受

7

PathologicalPathDecideRule

如果URL中相同目录名超过配置文件中的个数,则拒绝,如http://www.xxx.com/a/a/a/a/a其中a的个数超过一定限制则拒绝

8

PrerequisiteAcceptDecideRule

如果URL中有先决条件URL则接受,也就是该CandidateURI里的pathFromSeed属性里含有P,表示运行该URL之前有先要运行的URL

9

RejectDecideRule

URL规则,表示拒绝

10

TooManyHopsDecideRule

如果超过配置文件中的约点数(max-hops),则拒绝

2.2.7 org.archive.crawler.event包

序号

说明

1

CrawlStatusListener

爬虫监听器,如监听爬虫是否在运行,是否暂停等

2

CrawlURIDispositionListener

URL监听器,如监听URL是否失败,是要要重新抓取等

2.2.8 org.archive.crawler.extractor包

序号

说明

1

Extractor

所有抽取类的父类,用于从一个URL中抽取出新的URL

2

ExtractorCSS

从CSS中抽取出新的URL

3

ExtractorDOC

从DOC中抽取出新的URL

4

ExtractorHTML

从HTML中抽取出新的URL,Heritrix核心类

5

ExtractorHTTP

从HTTP中抽取出新的URL

6

ExtractorJS

从Javascript中抽取出新的URL

7

ExtractorPDF

从PDF中抽取出新的URL

8

ExtractorSWF

从SWF中抽取出新的URL

9

ExtractorXML

从XML中抽取出新的URL

10

HTTPContentDigest

网页内容文摘,实际上是通过MD5或SHA1算法将网页内容指纹化

11

Link

链接,代表抽取出来的URL

3 Heritri扩展和定制

3.1 向Heritrix添加自己的Extractor

Heritrix所提供的大众化的Extractor只能够将所有信息全部抓取下来。在这种情况下,就无法控制Heritrix到底该抓取哪些内容,不该抓取哪些内容,进而造成镜像信息太复杂,不好建立索引。Extractor是一个抽象类,用来添加自己的扩展功能。

3.2定制抓取URL(以blog.sina.com.cn为例)

以下使用一个实例,来讲解该如何定制和使用FrontierScheduler。只要在FrontierScheduler类中的schedule方法中添加过滤代码即可,也可以自己写个类然后继承它,再重写这个方法。

下面以抓取新浪博客中博文为例:

过滤代码正则表达式:

(url.equals("dns:blog.sina.com.cn")||url.matches("http://blog.sina.com.cn/s/blog_[0-9a-z]{16}.html(\\?tj=1)*"))

  1. Heritrix抓取规则

4.1抓取特定格式/特定要求的网页

这个要根据具体的网站,才能采取具体的措施。这主要是根据网站编写的时候,它的出度的具体格式。如果是类似<a href="http://www.xxx.xxx.xx...." ..>这样的可以直接指向某个具体的URL,那么添加到URI中的应该是这个完整的URL,如果是去掉了http://www等的前面的内容,而只是简单指向本网站下的某个网页,那么在加入到URI中的时候,要记得加上头使得它是一个完整的网页的URL。

4.2参数配置

进入运行参数设置页面后,有很多可以设定的参数,对于需要了解详情的设置,请点击设置框左边的“?”号,可看到弹出的帮助信息。Writers主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入(保存成本地文件)。当然处理起来,镜象方式要更为容易一些。默认的是Arc方式点击旁边的Remove删除在下拉框中选择org.archive.crawler.writer.MirrorWriterProcessor 单击Add添加。如图所示:

还需要更改 “HTTP-Header”项中的内容,更改其属性值user-agent和 from 其中user-agent中的 PROJECT_URL_HERE 对应自己的完整URL地址,(http://www.xxx.xxx)from中设置自己的合法email地址只需是格式正确的邮件地址就可以@VERSION@是设置heritrix的版本填上1.14.4 user-agent Mozilla/5.0 (compatible; heritrix/1.14.4 +http://www.xxx.xxx) 。如下图:

4.3数据过滤

使用Heritrix来抓取网页必然会存在一些不需要的数据或者URL,需要用正则表达式来过滤到你不想要的东西,抓取和过滤的原理是一样的,就是具有共性的头和尾,把中间部分抓出来,正则表达式在抓取中应用比较多,也可以称之为一种规则,你抓取内容要按照一定的规则来抓取,无用的你还得按照一定的规则过滤。

4.4抓取范围

Heritrix能对初始种子网页进行内部链接、html、JS、CSS、SWF、DOC、PDF文件和相关图片的爬取。也可以自己写扩展类按照既定的规则。

  1. Heritrix运行环境

操作系统

主要配置

Java环境

Windows XP/Win7

CPU:双核2GHZ以上

内存:2G以上

存储:100G以上

安装JDK环境1.6以上

linux

CPU:双核2GHZ以上

内存:2G以上

存储:100G以上

安装JDK环境1.6或者如果只是运行不做开发的话,安装相应位数的JRE包即可

  1. Heritrix抓取测试

6.1 登陆并创建抓取目标

在MyEclipse中配置完成后运行Heritrix这个类启动服务,在Web页面输入localhost:8080就会得到如图5.1的画面,输入admin、admin就跳到抓取页面控制台如图5.2所示,点击Jobs开始创建要抓取的URL任务。

图5.1登录界面

图5.2控制台

  1. Modules配置

创建完抓取链接(图5.3所示)后,点击Modules在图5.4所示中选中org.archive.crawler.writer.MirrorWriterProcessor简单直观的镜像方式,配置完点击Settings进行配置。

图5.3创建抓取任务

图5.4设置Modules

  1. Settings设置

这里只需要设置 user-agent 和 from,其中:

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

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

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

对于各项参数的解释,可以点击参数前的问号查看。本次任务设置如图5.5所示。

图5.5设置Settings

  1. 抓取任务

点击“Start”启动任务,刷新一下即可看到抓取进度以及相关参数。同时可以暂停或终止抓取过程,如图5.6所示。需要注意的是,进度条的百分比数量并不是准确的,这个百分比是实际上已经处理的链接数和总共分析出的链接数的比值。随着抓取工作不断进行,这个百分比的数字也在不断变化。

图5.6启动任务

  1. 抓取到的网页

在 Heritrix工程目录下自动生成“jobs”文件夹,包含本次抓取任务。抓取下来网页以镜像方式存放,也就是将 URL 地址按“/”进行切分,进而按切分出来的层次存储。如图 5.7 所示。

图5.7抓取到的网页

Heritrix爬虫方案相关推荐

  1. 超强反爬虫方案!Requests 什么的通通爬不了

    " 阅读本文大概需要 3 分钟. " 最近涛哥想到了一个非常强的反爬虫方案 -- 禁用所有 HTTP 1.x 的请求! 现在很多爬虫库其实对 HTTP/2.0 支持得不好,比如大名 ...

  2. 十分钟解决爬虫问题!超轻量级反爬虫方案

    本文将描述一种尽量简单的反爬虫方案,可以在十几分钟内解决部分简单的爬虫问题,缓解恶意攻击或者是系统超负荷运行的状况:至于复杂的爬虫以及更精准的防御,需要另外讨论. 爬虫和反爬虫日益成为每家公司的标配系 ...

  3. 基于Heritrix的特定主题的网络爬虫配置与实现

    建议在了解了一定网络爬虫的基本原理和Heritrix的架构知识后进行配置和扩展. 摘要 随着网络时代的日新月异,人们对搜索引擎,网页的内容,大数据处理等问题有了更多的要求.如何从海量的互联网信息中选取 ...

  4. 利用 Heritrix 构建特定站点爬虫

    本文由浅入深,详细介绍了 Heritrix 在 Eclipse 中的配置.运行.最后对其进行扩展,介绍如何实现只抓取特定网站的页面. 通过本文,读者可以了解 Heritrix 的相关特点以及在 Ecl ...

  5. 文末送书|可能是最全的反爬虫及应对方案

    点击上方"一行数据",选择"置顶星标"公众号 干货福利,第一时间送达 大家好,我是一行 今天分享的文章总结了全网最全的反爬虫方案,强烈建议收藏 爬虫是 Pyth ...

  6. python爬虫工程师-Python-爬虫工程师-面试总结

    对if __name__ == 'main'的理解陈述 __name__是当前模块名,当模块被直接运行时模块名为__main__,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码 ...

  7. heritrix 相关

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  8. android新闻app_如何利用 Python 爬虫实现给微信群发新闻早报?

    1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat 发送到指定的社群中. ...

  9. python爬虫面试遇到的问题

    文章目录 1python基础 1.1 列表生成式和生成器的区别 ? 1.2 如何不用任何循环快速筛掉列表中的奇数元素 ? 1.3 map和reduce的用法 1.4 装饰器的作用 1.5 Python ...

最新文章

  1. Nginx开启GZIP来压缩网页
  2. Python学习心得——基础知识(六)
  3. HTML5 服务器推送事件(Server-sent Events)实战开发
  4. PHP的static
  5. [转] 更新Flash CS6发布设置的目标播放器版本
  6. STL学习笔记5--map and multimap
  7. oracle收集直方图,sql – 在Oracle中创建直方图/频率分布的最佳方法?
  8. java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用
  9. 研究生,怎么经济独立?
  10. 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
  11. 常见排序算法的python实现
  12. 恩智浦智能车入门——一定避免那些坑
  13. js自动生成手机扫描二维码就可以实现自动下载apk的二维码
  14. Map嵌套Map遍历
  15. 【机器学习实验二】k-NN算法—改进约会网站以及手写体数字识别
  16. Oracle报ORA-00942: 表或视图不存在的解决方法
  17. php-fpm端口占用无法启动
  18. 阿伟教学--VMWare装Mac
  19. 让你的APP轻松加上扫描二维码功能
  20. [Vue warn]: Failed to resolve component: xxx

热门文章

  1. ArcGIS API for JavaScript 报错Uncaught ReferenceError:define is not defined
  2. 智慧物业管理系统(Springboot)
  3. 两台Linux完美实现双机热备
  4. 1014 Waiting in Line 队列操作
  5. html+下拉列表项太多,下拉列表的选项太多?试试这个
  6. 硬核实测 | 深信服超融合是Oracle数据库的最佳CP,实锤了
  7. 2021-08-30 黑马移动端头条项目-day02
  8. 时间同步软件 linux,时间同步(Arch Linux)
  9. 计算机中丢失vcruntime140_1.dll,要怎么修复这个问题
  10. 云村,网易云音乐的扛把子?