Heritrix爬虫方案
Heritrix爬虫说明
概述
安装部署好的Heritrix爬虫总共有28个jar包(不包括系统jar包)。关于Heritrix的安装配置及使用方法在文档末尾给出网址链接。在Eclipse中安装配置完成后,运行Heritrix.java启动爬虫,在浏览器地址栏中输入:localhost:8080进入UI任务创建、参数配置界面进行各项操作。
类包说明
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 |
扩展的其他包,待研究 |
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)*"))
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文件和相关图片的爬取。也可以自己写扩展类按照既定的规则。
Heritrix运行环境
操作系统 |
主要配置 |
Java环境 |
Windows XP/Win7 |
CPU:双核2GHZ以上 内存:2G以上 存储:100G以上 |
安装JDK环境1.6以上 |
linux |
CPU:双核2GHZ以上 内存:2G以上 存储:100G以上 |
安装JDK环境1.6或者如果只是运行不做开发的话,安装相应位数的JRE包即可 |
Heritrix抓取测试
6.1 登陆并创建抓取目标
在MyEclipse中配置完成后运行Heritrix这个类启动服务,在Web页面输入localhost:8080就会得到如图5.1的画面,输入admin、admin就跳到抓取页面控制台如图5.2所示,点击Jobs开始创建要抓取的URL任务。
图5.1登录界面
图5.2控制台
Modules配置
创建完抓取链接(图5.3所示)后,点击Modules在图5.4所示中选中org.archive.crawler.writer.MirrorWriterProcessor简单直观的镜像方式,配置完点击Settings进行配置。
图5.3创建抓取任务
图5.4设置Modules
Settings设置
这里只需要设置 user-agent 和 from,其中:
•“@VERSION@”字符串需要被替换成 当前Heritrix 的版本信息1.14.4。
•“PROJECT_URL_HERE”可以被替换成任何一个完整的 URL 地址。
•“from”属性中不需要设置真实的 E-mail 地址,只要是格式正确的邮件地址就可以了。
对于各项参数的解释,可以点击参数前的问号查看。本次任务设置如图5.5所示。
图5.5设置Settings
抓取任务
点击“Start”启动任务,刷新一下即可看到抓取进度以及相关参数。同时可以暂停或终止抓取过程,如图5.6所示。需要注意的是,进度条的百分比数量并不是准确的,这个百分比是实际上已经处理的链接数和总共分析出的链接数的比值。随着抓取工作不断进行,这个百分比的数字也在不断变化。
图5.6启动任务
抓取到的网页
在 Heritrix工程目录下自动生成“jobs”文件夹,包含本次抓取任务。抓取下来网页以镜像方式存放,也就是将 URL 地址按“/”进行切分,进而按切分出来的层次存储。如图 5.7 所示。
图5.7抓取到的网页
Heritrix爬虫方案相关推荐
- 超强反爬虫方案!Requests 什么的通通爬不了
" 阅读本文大概需要 3 分钟. " 最近涛哥想到了一个非常强的反爬虫方案 -- 禁用所有 HTTP 1.x 的请求! 现在很多爬虫库其实对 HTTP/2.0 支持得不好,比如大名 ...
- 十分钟解决爬虫问题!超轻量级反爬虫方案
本文将描述一种尽量简单的反爬虫方案,可以在十几分钟内解决部分简单的爬虫问题,缓解恶意攻击或者是系统超负荷运行的状况:至于复杂的爬虫以及更精准的防御,需要另外讨论. 爬虫和反爬虫日益成为每家公司的标配系 ...
- 基于Heritrix的特定主题的网络爬虫配置与实现
建议在了解了一定网络爬虫的基本原理和Heritrix的架构知识后进行配置和扩展. 摘要 随着网络时代的日新月异,人们对搜索引擎,网页的内容,大数据处理等问题有了更多的要求.如何从海量的互联网信息中选取 ...
- 利用 Heritrix 构建特定站点爬虫
本文由浅入深,详细介绍了 Heritrix 在 Eclipse 中的配置.运行.最后对其进行扩展,介绍如何实现只抓取特定网站的页面. 通过本文,读者可以了解 Heritrix 的相关特点以及在 Ecl ...
- 文末送书|可能是最全的反爬虫及应对方案
点击上方"一行数据",选择"置顶星标"公众号 干货福利,第一时间送达 大家好,我是一行 今天分享的文章总结了全网最全的反爬虫方案,强烈建议收藏 爬虫是 Pyth ...
- python爬虫工程师-Python-爬虫工程师-面试总结
对if __name__ == 'main'的理解陈述 __name__是当前模块名,当模块被直接运行时模块名为__main__,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码 ...
- heritrix 相关
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- android新闻app_如何利用 Python 爬虫实现给微信群发新闻早报?
1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat 发送到指定的社群中. ...
- python爬虫面试遇到的问题
文章目录 1python基础 1.1 列表生成式和生成器的区别 ? 1.2 如何不用任何循环快速筛掉列表中的奇数元素 ? 1.3 map和reduce的用法 1.4 装饰器的作用 1.5 Python ...
最新文章
- Nginx开启GZIP来压缩网页
- Python学习心得——基础知识(六)
- HTML5 服务器推送事件(Server-sent Events)实战开发
- PHP的static
- [转] 更新Flash CS6发布设置的目标播放器版本
- STL学习笔记5--map and multimap
- oracle收集直方图,sql – 在Oracle中创建直方图/频率分布的最佳方法?
- java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用
- 研究生,怎么经济独立?
- 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
- 常见排序算法的python实现
- 恩智浦智能车入门——一定避免那些坑
- js自动生成手机扫描二维码就可以实现自动下载apk的二维码
- Map嵌套Map遍历
- 【机器学习实验二】k-NN算法—改进约会网站以及手写体数字识别
- Oracle报ORA-00942: 表或视图不存在的解决方法
- php-fpm端口占用无法启动
- 阿伟教学--VMWare装Mac
- 让你的APP轻松加上扫描二维码功能
- [Vue warn]: Failed to resolve component: xxx
热门文章
- ArcGIS API for JavaScript 报错Uncaught ReferenceError:define is not defined
- 智慧物业管理系统(Springboot)
- 两台Linux完美实现双机热备
- 1014 Waiting in Line 队列操作
- html+下拉列表项太多,下拉列表的选项太多?试试这个
- 硬核实测 | 深信服超融合是Oracle数据库的最佳CP,实锤了
- 2021-08-30 黑马移动端头条项目-day02
- 时间同步软件 linux,时间同步(Arch Linux)
- 计算机中丢失vcruntime140_1.dll,要怎么修复这个问题
- 云村,网易云音乐的扛把子?