Heritrix源码分析(四) 各个类说明(转)
Heritrix的类的确很繁琐,往往继承了一层又一层,最多的继承好像有7层。下面就一个包一个包的说明每个类的作用,由于里面Heritrix组件分明,很多组件没用到的同时该组件的类我也没怎么接触,所以这里会忽略一部分,如果有知道的请补充,谢谢!如果对包还有不熟悉的,可以查看我前面的文章,这里也给出链接http://guoyunsky.iteye.com/admin/blogs/613249
1.org.archive.crawler
| 序号 | 类 | 说明 |
| 1 | CommandLineParser | Heritrix也可以通过CMD命令进行操作,该类用于解析CMD命令 |
| 2 | Heritrix | Heritrix主类,可以通过该类启动Heritrix |
| 3 | SimpleHttpServer | Heritrix Web服务器,可以通过Web管理Heritrix |
| 4 | WebappLifecycle | 封装Servlet,如此才可以通过Web启动Heritrix,里面装载Heritrix对象 |
2.org.archive.crawler.admin
| 序号 | 类 | 说明 |
| 1 | CrawlJob | Heritrix的核心类,代表着一个抓取任务,order.xml中大部分属性都围绕其配置,以后会着重说明 |
| 2 | CrawlJobErrorHandler | 维护者一个抓取任务(CrawlJob)的错误日志,UI中显示的JOB错误就来自于它 |
| 3 | CrawlJobHandler | 抓取任务处理器,Heritrix可以有多个抓取任务,都由它进行管理 |
| 4 | InvalidJobFileException | 抓取任务文件异常,意义不大 |
| 5 | SeedRecord | 记录种子的处理记录,如该种子重定向到哪个URL,在seeds.txt里面会有说明,该重定向值就来源于它 |
| 6 | StatisticsSummary | 统计摘要类,所用不多 |
| 7 | StatisticsTracker | Heritrix核心类,统计跟踪器,贯穿整个Heritrix的运行,如统计抓取了多少URL,以后会着重说明 |
3.org.archive.crawler.admin.ui
| 序号 | 类 | 说明 |
| 1 | CookieUtils | Cookie工具类,主要用于访问Cookie |
| 2 | JobConfigureUtils | CrawlJob配置管理工具类,当你通过Web Ui去配置一个CrawlJob时就会用到这个类 |
| 3 | RootFilter | 不熟 |
4.org.archive.crawler.datamodel
| 序号 | 类 | 说明 |
| 1 | CandidateURI | Heritrix的核心类,代表着一个URL,贯穿整个抓取,与CrawlURI的区别是它还没有通过调度器(Frontier),只有通过了调度器的URL才可能去获取网页内容区下载等,以后会着重说明 |
| 2 | CandidateURITest | CandidateURI的测试类,比如可以用它获知如何创建CanditeURI |
| 3 | Checkpoint | Heritrix会定期备份它的数据,如日志、正在获取的URL内容,都是在底层定时运行,当Heritrix异常中断可以通过它来恢复.也类似于各个数据库的Ckeckpoint |
| 4 | CoreAttributeConstants | 装载着Heritrix的基本属性变量名,一般是对应order.xml中的标签名 |
| 5 | CrawlHost | Heiritrix的核心类,代表着一个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 |
5.org.archive.crawler.datamodel.credential
| 序号 | 类 | 说明 |
| 1 | Credential | 凭证类,代表着一个凭证,从order.xml配置文件中获取数据 |
| 2 | CredentialAvatar | 代表着一个具体的凭证 |
| 3 | HtmlFormCredential | Credential的子类,代表着提交HTML FORM表单时所需要的凭证 |
| 4 | Rfc2617Credential | Credential的子类,代表着RFC2617 HTTP 认证凭证 |
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),则拒绝 |
7.org.archive.crawler.event
| 序号 | 类 | 说明 |
| 1 | CrawlStatusListener | 爬虫监听器,如监听爬虫是否在运行,是否暂停等 |
| 2 | CrawlURIDispositionListener | URL监听器,如监听URL是否失败,是要要重新抓取等 |
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 |
9.org.archive.crawler.fetcher
| 序号 | 类 | 说明 |
| 1 | FetchDNS | 获取DNS数据,如IP |
| 2 | FetchFTP | 获取FTP数据 |
| 3 | FetchHTTP | 获取HTTP数据 |
| 4 | HeritrixHttpMethodRetryHandler | HTTP重试处理器,重新去连接HTTP |
10.org.archive.crawler.framework
| 序号 | 类 | 说明 |
| 1 | AbstractTracker | 统计器,统计抓取情况,父类,具体统计由子类实现 |
| 2 | AlertManager | UI界面消息管理器,给用户显示爬虫相关消息,如一些异常情况 |
| 3 | Checkpointer | 备份器,定时备份Heritrix相关数据,如日志、BDB文件等 |
| 4 | CrawlController | 控制器,控制整个爬虫的启动、暂停、停止等,Heritrix的核心类 |
| 5 | CrawlScope | URL范围管理器,如种子、哪些URL符合抓取哪些URL不符合抓取 |
| 6 | Filter | 过滤器,决定哪些URL可以抓取哪些不可以,父类,具体由子类实现 |
| 7 | Frontier | 调度器,对进来的URL进行调度,使其在接来下可以抓取 |
| 8 | Processor | 处理器,一个URL由不同的处理器(组件)合作完成,这个为处理器父类,不同的组件有不同的实现 |
| 9 | ProcessorChain | 处理器链,包含相同类型的处理器,如抽取URL的时候有从Html抽取的ExtractorHTML,从JavaScript抽取的ExtractorJs |
| 10 | ProcessorChainList | 处理器链集合,包含多个处理器链,每个URL都会有这样一个处理器集合,使得先从该集合中获取处理器链,然后再从处理器链中获取每个处理器,最后让每个处理器都做他们的处理,完成整个抓取 |
| 11 | Scoper | 范围管理器,验证一个URL是否在用户配置(从order.xml中获取)的范围 |
| 12 | StatisticsTracking | 跟踪统计器,主要统计抓取情况,如宽带占用、抓取多少URL、抓取速度等,贯穿整个爬虫的运行 |
| 13 | ToePool | 线程池,用于管理爬虫线程 |
| 14 | ToeThread | 爬虫线程,代表着一个抓取,Heritrix的核心类,贯穿整个爬虫的运行,接下来会重点分析 |
| 15 | WriterPoolProcessor | 写处理器管理池,用于管理多个写处理器,可以在分布式中使用 |
11.org.archive.crawler.frontier
| 序号 | 类 | 说明 |
| 1 | AbstractFrontier | 调度器基本实现类,Heritrix最复杂的地方之一,接下来会重点分析 |
| 2 | BdbFrontier | BDB调度器,用BDB数据库去管理所有的URL,如保存哪些待抓取的URL,哪些已经抓取的URL,Heritrix最复杂的地方之一,接下来会重点分析 |
| 3 | BdbMultipleWorkQueues | 管理着所有的队列,所有的队列数据保存在BDB数据库中.Heritrix最复杂的地方之一,接下来会重点分析 |
| 4 | BdbWorkQueue | 抓取队列由BDB存储管理,相同classkey的URL为一个队列.classkey由用户配置决定,Heritrix默认是相同host的URL就为一个队列.Heritrix最复杂的地方之一,接下来会重点分析 |
| 5 | FrontierJournal | 调度器记录管理,记录调度器的每一次运行情况,如插入URL,插入失败URL等 |
| 6 | HostnameQueueAssignmentPolicy | URL ClassKey获得策略,Heritrix的默认策略,通过域名来获得URL的class key。然后相同的classkey存放相同的队列 |
| 7 | IPQueueAssignmentPolicy | URL ClassKey获得策略,这个策略是通过IP来获得URL的class key |
| 8 | QueueAssignmentPolicy | URL ClassKey获得策略,该类是抽象类,不同的策略由不同的子类实现,如根据域名、IP等,用户可以自己扩展 |
| 9 | RecoveryJournal | 管理着/logs/recover.gz,该文件记录所有的URL抓取情况,如抓取成功、失败都有不同的对应格式。该文件主要用于下次Heritrix恢复,如Heritrix异常中断重新启动Heritrix的话又会重新抓取,而如果基于该文件启动的话则会避免这个问题,同时对于上次异常中断而来不及抓取的URL都会优先抓取 |
| 10 | RecyclingSerialBinding | 给每个线程分配的数据输出流管理器,里面用ThreadLocal来管理每个线程的数据输出流,如此可以节省大量重复序列化 |
| 11 | WorkQueue | 代表着一个队列,抽象类,会有不同的子类实现,如由BDB存储数据的BdbWorkQueue,Heritrix最复杂的地方之一,接下来会重点分析 |
| 12 | WorkQueueFrontier | 队列调度器,管理着所有的队列,里面用不同的类型管理着不同的队列,如不在活动状态队列:Queue<String> inactiveQueues.可以说是Heritrix中最为复杂最为关键的类,接下来会重重点分析 |
Heritrix源码分析(四) 各个类说明(转)的更多相关文章
- Heritrix源码分析(十四) 如何让Heritrix不间断的抓取(转)
欢迎加入Heritrix群(QQ):109148319,10447185 , Lucene/Solr群(QQ) : 118972724 本博客已迁移到本人独立博客: http://www.yun5u ...
- Heritrix源码分析(十四)
近段时间在搞定Lucene的一些问题,所以Heritrix源码分析暂时告一段落.今天下午在群里有同学提到了Heritrix异常终止的问题以及让Heritrix不停的抓取(就是抓完一遍后载入种子继续抓取 ...
- Heritrix源码分析(九) Heritrix的二次抓取以及如何让Heritrix抓取你不想抓取的URL
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/644396 本博客已迁移到本人独立博客: http://www.yun5u ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- JUC源码分析-其它工具类(一)ThreadLocalRandom
JUC源码分析-其它工具类(一)ThreadLocalRandom ThreadLocalRandom 是 JDK7 在 JUC 包下新增的随机数生成器,它解决了 Random 在多线程下多个线程竞争 ...
- ABP源码分析四十七:ABP中的异常处理
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...
- 转:Ogre源码分析之Root类、Facade模式
Ogre源码分析(一)Root类,Facade模式 Ogre中的Root对象是一个Ogre应用程序的主入口点.因为它是整个Ogre引擎的外观(Façade)类.通过Root对象来开启和停止Ogre是最 ...
- ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
- ABP源码分析四十:ZERO的Application和Tenant
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...
随机推荐
- Dom新find
1.HTML标签和属性是不区分大小写的,但JS是区分大小写的:所以(1)HTML专有的接口的属性应该以小写字母开头,如果属性名由多个单词构成,第二个及接下来的每个单词的首字母都要大写.(2)有些HTM ...
- MongoDB (三) MongoDB 安装
MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版 ...
- hdu1715
http://acm.hdu.edu.cn/showproblem.php?pid=1715 模板大数: #include <stdio.h> #include <string.h& ...
- React事件函数简介
一.事件汇总 二.例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset= ...
- mysql主从配置(转载)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://369369.blog.51cto.com/319630/790921 还可以参考 ...
- Centos环境下部署游戏服务器-编译
游戏服务器是在windows环境开发的,相关跨平台的东西在这里不谈了,只谈如何将Visual Studio 工程转换到Linux下编译.这里涉及到的软件分别为:Centos版本为6.4,Visual ...
- Java基本开发环境搭建
转http://blog.csdn.net/cxwen78/article/details/6400798 eclipse怎么编写JAVA,然后运行 1.新建一个Java project取个名字(首字 ...
- babel安装
大家都知道目前ES6不是浏览器全部都是支持的,所以要通过转码器先进行转码然后再编译代码.小心在学习ES6之前先安装了babel转码器,虽然当时安装的时候困难重重,遗憾的是没有把解决方案总结一下,别人询 ...
- Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换
1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) ...
- php静态
static 是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. 创建对象$object = new Class(),然后使用”- ...