Heritrix简介

Heritrix简介
爬虫概念,spider
像蜘蛛网一样的,从一个提供的种子URL地址开始,抓取当前URL的所有对外链接,往外发散。应该有URL去重复功能(去重复与增量抓取相互矛盾)、抓取层次限制功能。
Heritrix是什么?
一个开源的纯java的网络爬虫框架。遵循网站 robots(某些网站上有一些资源在时间上受下载或访问限制) 协议。
Heritrix优点?
Heritrix采用了Berkeley DB做为中间数据存储,像URL等。很大程度上提升了Heritrix的性能,因为Berkeley DB是一个可嵌入式的非关系型数据库(key-value)。使用BerkeleyDB做持久化队列,如待抓取队列,已抓取队列,重试队列等。
Heritrix 3 是一个基于多(JOB)任务并发运行系统
Heritrix的JOB是基于spring xml配置方式,比较灵活,如各处理链条的
并行队列,提高抓取速度。

Heritrix基本架构
CrawlController整个抓取过程的总控制者,整个抓取工作的起点,决定整个抓取任务的开始和结束。从Frontier获取URI,传递给线程池(ToePool)中的ToeThread处理
 
Frontier为处理链接的线程提供URL,并负责链接处理完成后的一些后续调度操作。Frontier负责确定下一个将被处理的URI,负责访问的均衡处理,避免对某一web服务器造成太大的压力。当一个URI被爬行完,它随同新发现的URIs被送回Frontier来安排进行后续crawling.  
next(int timeout):为处理线程提供一个链接.Heritrix的所有处理线程(ToeThread)都是通过调用该方法获取链接的.
schedule(CandidateURI caURI):调度待处理的链接.
finished(CrawlURI cURI):完成一个已处理的链接.
ToeThreadHertirix为多线程工作方式,每个ToeThread控制一个URI。ToeThread负责向Frontier请求一个新的URI并发派给相应的处理器,然后再去请求下一个URI。
 
Processors相关的处理器被编制到一个处理器链中。每条处理器链会对一个由ToeThread送来的URI进行一系列的处理。URI在一个链条中的传递过程是由ToeThread负责完成的。一个处理器(Processor)可以把一个处理完毕的URI传递到另外一个链条中。Hertirix提供了几条默认的处理器链:
1. Pre-fetch processing chain 主要根据robot协议,DNS以及下载范围控制信息判断当前URI是否应当处理
2. Fetch processing chain 从服务器抓取数据
3. Extractor processing chain从网页中提取新的URI,或者网页信息作其他用途
4. Write processing chain将数据写到本地磁盘中。以某种格式保存,并建立索引。
5. Post-processing chain   后处理工作,比如把URI放回等

Logs and reports

队列优先级:
URL优先级:
•NORMAL
默认的调度选项,大部分URI都是设置次选项
•MEDIUM
•HIGH
•HIGHEST

队列策略:
•Heritrix中的待抓取队列有多个。每一个URL都给予一个Key,然后将那些Key值相同的链接放在一起,成为一个队列,也就是一个Queue。
•默认情况下是按照host来进行分配的,即相同Host名称的所有URL都会被置放于同一个队列中间
•在Heritrix中,为每个队列赋上Key值的策略,也就是它的queue-assignment-policy。可以扩展QueueAssignmentPolicy来自定义URL的key值算法
增量抓取:
对种子URL设置下次抓取时间

我们对Heritrix做了哪些扩展?
根据Heritrix源代码,做了一定量的配置文件与代码的修改。
配置文件中去掉了 写处理链条,此处理链负责将网页内容抓写到磁盘上。
配置文件中对 抓取处理链条(FetchChain)做了定制化处理,如:
ignoredDownloadUrlPreselector 范围Scope处理;
metadataExtractor 抽取url所在的html信息,使用htmlunitdriver或者是webdriver来抓取url信息。首先判断url的网络状态是否正常,再找到相对应的模板,使用该模板来处理url信息,并将数据封装到model对象中。
fillModelProcessor 补充model对象的属性,如:类型对应的分类ID,真实URL(相对比URL跳转情况)等信息。
mergeOutlinksProcessor 抽取当前URL的对外链接。
posterUrlProcessor 自动处理海报属性。
ignoredDownloadProcessor 过滤掉不处理的对外URL链接
dataToActiveMQProcessor 保存数据到数据库。
dataToSolrProcessor 保存数据到SOLR。

通过SQL方式读取种子URL:
sqlWiesScraperConfigReader:将数据库的JSON数据转换为JAVA对象ScraperConfig。

分布式Heritrix
将原Heritrix抓取到的URL链接通过Hash计算后,借由JMS TOPIC分发到Heritrix集群中的每个Heritrix任务。


模板简介
模板概念
模板是匹配一类网页内容相似度比较高的通用处理方式。借由xpath提取网页信息。
模板与Heritrix接口是我们扩展出来的处理器metadataExtractor。
模板一些配置项,与Heritrix有一定相关联
1、模板配置需要添加一个URL规则,此规则为一个正则表达式字符串。则所有匹配该URL规则的链接会被该模板处理。
2、种子?种子与模板并不是很紧密的关联关系,因为当Heritrix读取一堆模板后,所有模板所配置的种子都被集中处理,并不是只侦对当前模板。当然一般我们添加的种子都是与当前模板相关联的。
3、解析html方式。Htmlunit 或者 webdriver
4、深度限制,默认5层
模板处理数据原理
模板借用MVEL动态解析脚本语言。我们自己也扩展了一些常用函数,如:pubDate(arg),格式化日期函数;xpath(),提取网页内xpath表达式代表的内容。相关函数与变量参考函数手册。

模板使用了一些处理器来组装成一个可执行的流程,风格类似于一种简易的编程。内置处理器有:
1、循环处理器:循环分两种,一种是条件判断循环;一种是对xpath取到的一组信息循环处理。
2、设置变量处理器:设置一个局部变量,对当前处理以及子处理可见
3、提取网页信息处理器:有两种提取处理器,一种是用精确的xpath来提取信息;一种是对一个信息区域通过分隔符来提取某个信息。
4、模拟点击处理器:模板页面鼠标点击事件
5、执行JavaScript脚本处理器:模拟浏览器执行javascript脚本
6、执行脚本处理器:可以直接嵌入式动态插入一些处理数据的脚本语言
模板工程Java代码分析
首先Heritrix启动任务会加载crawler-beans.cxml配置文件。
该配置文件中会加载模板工程中的ScraperManager类,这个单例管理类比较重要,它负责维护一些公共信息,如:读取模板(从数据库读取 JSON 字符串并转化为 ScraperConfig 对象)并持有、读取模型(从包路径读取类上有相应注解信息的POJO对象或从数据库中读取)并持有、创建Context(有URL上下文以及网页分析工具上下文(HtmlunitDriver、WebDriver))等功能。
该配置文件也会加载模板工程中的Webdriver池和HtmlunitDriver池信息。
在Heritrix的MetadataExtrator处理器中,调用ScraperConfig.run(ScraperContext) ,提取该URL网页内容,一个ScraperConfig类相当于咱们配置的一个具体的模板。
在ScraperConfig运行时,根据模板中定义好的处理器做处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Heritrix是IA的开放源代码,可扩展的,基于整个Web的,归档网络爬虫工程 Heritrix工程始于2003年初,IA的目的是开发一个特殊的爬虫,对网上的 资源进行归档,建立网络数字图书馆,在过去的6年里,IA已经建立了400TB的数据。 IA期望他们的crawler包含以下几种: 宽带爬虫:能够以更高的带宽去站点爬。 主题爬虫:集中于被选择的问题。 持续爬虫:不仅仅爬更当前的网页还负责爬日后更新的网页。 实验爬虫:对爬虫技术进行实验,以决定该爬什么,以及对不同协议的爬虫爬行结果进行分析的。 Heritrix的主页是http://crawler.archive.org Heritrix是一个爬虫框架,可加如入一些可互换的组件。 它的执行是递归进行的,主要有以下几步: 1。在预定的URI中选择一个。 2。获取URI 3。分析,归档结果 4。选择已经发现的感兴趣的URI。加入预定队列。 5。标记已经处理过的URI Heritrix主要有三大部件:范围部件,边界部件,处理器链 范围部件:主要按照规则决定将哪个URI入队。 边界部件:跟踪哪个预定的URI将被收集,和已经被收集的URI,选择下一个URI,剔除已经处理过的URI。 处理器链:包含若干处理器获取URI,分析结果,将它们传回给边界部件 Heritrix的其余部件有: WEB管理控制台:大多数都是单机的WEB应用,内嵌JAVA HTTP 服务器。 操作者可以通过选择Crawler命令来操作控制台。 Crawler命令处理部件:包含足够的信息创建要爬的URI。 Servercache(处理器缓存):存放服务器的持久信息,能够被爬行部件随时 查到,包括IP地址,历史记录,机器人策略。 处理器链: 预取链:主要是做一些准备工作,例如,对处理进行延迟和重新处理,否决随后的操作。 提取链:主要是获得资源,进行DNS转换,填写请求和响应表单 抽取链:当提取完成时,抽取感兴趣的HTML,JavaScript,通常那里有新的也适合的URI,此时URI仅仅被发现,不会被评估 写链:存储爬行结果,返回内容和抽取特性,过滤完存储。 提交链:做最后的维护,例如,测试那些不在范围内的,提交给边界部件 Heritrix 1.0.0包含以下关键特性: 1.用单个爬虫在多个独立的站点一直不断的进行递归的爬。 2。从一个提供的种子进行爬,收集站点内的精确URI,和精确主机。 3。主要是用广度优先算法进行处理。 4。主要部件都是高效的可扩展的 5。良好的配置,包括: a。可设置输出日志,归档文件和临时文件的位置 b。可设置下载的最大字节,最大数量的下载文档,和最大的下载时间。 c。可设置工作线程数量。 d。可设置所利用的带宽的上界。 e。可在设置之后一定时间重新选择。 f。包含一些可设置的过滤机制,表达方式,URI路径深度选择等等。 Heritrix的局限: 1。单实例的爬虫,之间不能进行合作。 2。在有限的机器资源的情况下,却要复杂的操作。 3。只有官方支持,仅仅在Linux上进行了测试。 4。每个爬虫是单独进行工作的,没有对更新进行修订。 5 。在硬件和系统失败时,恢复能力很差。 6。很少的时间用来优化性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值