`
wangwei3
  • 浏览: 120336 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

heritrix设计详解(一) 总述

阅读更多
原创文章:转载请注明出处

读了一段时间的源码,结合网上的文档和自己的理解来详解下heritrix的体系结构,总体来说hertitrix是一个设计优良的框架,扩展性极强,除了无法实现分布式之外,其他部件都可以被扩展。

体系结构
CrawlController(下载控制器):整个下载过程的总的控制者,整个抓取工作的起点,决定整个抓取任务的开始和结束.从Frontier获取URI,传递给线程池(ToePool)中的ToeThread调用处理器链(Processorchains)处理.
Frontier(边界部件): 跟踪哪个预定的URI将被收集,和已经被收集的URI,选择下一个   URI,剔除已经处理过的URI.有三个核心方法next(),schedule(),finished().

crawlScope(范围部件):设置应该在什么范围内抓取网页链接.如域限制,不受限制


控制器

中央控制器是抓取的核心组件.它决定抓取的开始、结束和暂停.从Frontier获取URI,传递给ToePool中的ToeThread处理.
类中定义了一下组件
Crawlerorder配置文件对象
Crawlerscope抓取范围控制对象
Processorchainlist处理链对象
Frontier边界部件
Toepool线程池
Servercache缓存,他保存了所有在当前任务重抓取过的host名称和server名称(包括IP地址,历史记录,机器人策略.)


边界部件
跟踪哪个预定的URI将被收集,和已经被收集的URI,选择下一个   URI,剔除已经处理过的URI.
调度器负责从Url库中选择需要抓取的Url列表,它是整个Spider系统的大脑,此模块是实现了优雅抓取的核心,调度器针对URL采用了域散列,可以保证不会同时有两个线程抓取同一个域下的URL,并且对每个域的抓取间隔都有控制;
具体实现 得到一个URL通过解析得到他的主域名(例如: http://www.autohome.com.cn/brand/解析后的主域名就为www.autohome.com.cn)把此主域名做key所有此域名下的URL对象都存储在这个key中的BDB中.具体见下图
Key1 Queue1(url1,url2,url3,…)
Key2 Queue2(urlx,…)
Key3 Queue3(…)

以上key值的生成方式可以根据用户需求拓展,这里提供了两种策略.
域生成: 按域生成则是按域生成key,把同一个域名下的URL都放入这个key值的队列中.按域生成可以很好的控制抓取速度,但是在需要抓取的网站数少的情况下,下载速度明显很慢.
elhash生成:elfhash生成是按散列生成key,这能明显提高抓取速度,可是这样会对服务器照成压力.
每次得到一个url对象的时候就会锁定这个key值,直到其运行完并且过了等待时间(比如配置的是50K/S而实际抓取是100K/S则会让队列睡眠等待成配置的速度+配置文件中配置的间隔上一次访问访问时间)才会解锁,这保证了同一时间内只会有一个线程抓取此域名的URL.
此类里面实现一个过滤器,抓们用来过滤当前需要被加入的链接对象是否已经抓取过.过滤器可以根据用户需求拓展.
此服务还实现了URL抓取的计数(访问,排除,成功,失败),去重服务,URL备份以及日志服务


处理器链
许多Processor组成一个处理链(processor chains)中,每一个处理链对URI进行一系列的处理.
(1)Pre-fetch processing chain(预处理链)
主要根据下载范围控制信息判断当前URI是否应当处理.
(2)Fetch processing chain(抓取处理链)
从远程服务器获取数据
(3) Extractor processing chain(抽取处理链)
从网页中抽取新的URI
(4)Write/index processing chain(写处理链)
负责把数据写入本地磁盘、DB、DBD
(5)Post-processing chain(后置处理链)
把抽取出来的URL加入到队列

整个处理链由管理员配置,可以每一个processor块都可以由多个处理

Processor类:代表当个的处理器,素有的处理器都是他的子类
ProcessorChain类:此类类似于一个队列,里面包括了同种类型的几个Processor
ProcessorChainList类:此类保存了此次抓取所设置的所有处理器链.
比如fetchHTML用来得到HTML页面,fetchDNS用来得到DNS信息,他们都继承FETCH类,FETCH继承Processor.多个Processor组成ProcessorChainList.

线程池(ToePool)
线城池(ToePool)是一个标准的线程池,他用来管理所有抓取线程(ToeThread),每个抓取线程向frontier要一个URL然后调用处理链.


去重策略
先抓取网页,把URI和网页摘要保存到hash表中.第二次抓取相同URI根据URI查找并比较之前存入hash表中的摘要是否相同


FETCHHTML
这是处理链中的一个实现,用来获取HTML内容.他首先判断能否抓取HTML,在抓取过程中将网页信息写入内存,然后计算网页摘要值sha1或md5,fetchhtml会把每个url访问的cookie存储

配置服务
heritrix编写了一套强大的配置服务系统,所有的配置服务都继承与此服务。其中有个很重要的超类ComplexType,所有配置模块超类,这个类是通用的配置框架的核心,所有可配置的模块都扩展这个类或是他的子类.本类的所有子类都将自动遵循JMX的DynamicMBean
0
0
分享到:
评论

相关推荐

    Heritrix使用详解与高级开发应用

    Heritrix是一个强大的Java开发的开源网络爬虫,主要用于从互联网上抓取各种资源。它由www.archive.org提供,以其高度的可扩展性而著称,允许开发者自定义抓取逻辑,通过扩展其内置组件来适应不同的抓取需求。本文将...

    Heritrix源码详解

    从网上找得应该是中文Heritrix源码最详细的说明了。折腾了好久,没有把网页打成chm,只能打个exe用用。

    Java爬虫技术框架之Heritrix框架详解

    Heritrix采用模块化设计,由核心类和插件模块组成。核心类是不可覆盖的,但可以配置,而插件模块允许开发者用第三方模块替换默认模块,以适应特定的抓取逻辑。CrawlController是整个爬行过程的控制器,负责启动和...

    heritrix的配置

    Heritrix是一款开源的网页爬虫工具,它被设计用于归档网络内容。这款工具能够帮助用户抓取和保存网页资源,支持复杂的爬行策略,是进行互联网数据采集的理想选择之一。 #### 二、Heritrix与MyEclipse集成步骤 ####...

    网络爬虫Heritrix1.14.4可直接用

    总结来说,Heritrix 1.14.4是一个功能丰富的网络爬虫工具,它的模块化设计和灵活的配置使得它适合各种规模的爬虫项目。通过深入学习和实践,开发者可以掌握网络爬虫的基本原理和技术,并能够构建自己的网络数据获取...

    heritrix爬虫安装部署

    ### Heritrix爬虫安装部署知识点详解 #### 一、Heritrix爬虫简介 Heritrix是一款由互联网档案馆(Internet Archive)开发的开源网络爬虫框架,它使用Java语言编写,支持高度定制化的需求。Heritrix的设计初衷是为了...

    heritrix-3.1.0 最新jar包

    Heritrix 3.1.0 是一个强大的网络爬虫工具,主要用于抓取和存档互联网上的网页。这个最新版本的jar包包含了Heritrix的核心功能,为用户提供了一个高效的网页抓取框架。Heritrix的设计理念是模块化和可配置性,使得它...

    heritrix-1.14.2.zip

    Heritrix是一个由Internet Archive维护的项目,其设计目标是提供高度可配置和可扩展的爬虫框架。它能够按照预定义的规则抓取网页,这些规则包括URL过滤、深度限制、爬行频率控制等。Heritrix支持HTTP、HTTPS等多种...

    开发自己的搜索引擎 lucene + heritrix

    2. 设计和开发一个网络爬虫,使用Heritrix等工具抓取与垂直领域相关的网页数据。 3. 存储和预处理抓取到的数据。这通常涉及到文本清洗、去重、格式转换等步骤,确保数据质量。 4. 使用Lucene建立索引系统。这部分...

    heritrix1.14.0jar包

    Heritrix是一款强大的开源网络爬虫工具,由互联网档案馆(Internet Archive)开发,用于抓取和保存网页数据。在IT行业中,爬虫是获取大量网络数据的重要手段,Heritrix因其灵活性、可扩展性和定制性而备受青睐。标题...

    Heritrix3手册翻译

    Heritrix 3 是一款强大的网络爬虫工具,主要用于网页抓取和互联网存档。它在2009年12月发布了3.0.0版本,并随着时间的推移不断更新,提供了3.0.1补丁版和3.2.0版,增加了新的特性和功能,比如更简单的使用方式、持续...

    基于Lucene和Heritrix的职位垂直搜索引擎的设计与实现

    《基于Lucene和Heritrix的职位垂直搜索引擎的设计与实现》是一篇深入探讨搜索引擎技术在特定领域的应用的优秀研究生毕业论文。这篇论文的核心是利用开源工具Lucene和Heritrix来构建一个针对职位信息的垂直搜索引擎,...

    很好的heritrix学习资料

    Heritrix是一款强大的开源网络爬虫工具,专为大规模、深度网页抓取设计。这款工具由互联网档案馆(Internet Archive)开发,旨在提供灵活、可扩展的网页抓取框架,适用于学术研究、数据挖掘和历史记录保存等多种用途...

    Heritrix(windows版)

    Heritrix是一款开源的网络爬虫软件,专为大规模网页抓取而设计。这款工具主要用于构建互联网档案馆、搜索引擎的数据源以及其他需要大量网页数据的项目。Heritrix由Internet Archive开发,支持高度可配置和扩展,能够...

    heritrix系统使用.ppt

    Heritrix是一个强大的开源网络爬虫工具,用于批量抓取互联网上的网页。它提供了一种高效、可配置的方式来收集和处理网页数据。本篇将详细解释Heritrix系统的使用、核心概念、工作原理以及关键组件。 首先,Heritrix...

Global site tag (gtag.js) - Google Analytics