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

heritrix3源码分析(outbound 和inbound)

 
阅读更多
heritrix3 与heritrix1.14 相比有很大不同, heritrix3 定义了一种阻塞的FIFO queue, 属于典型的生产消费者模型


AbstractFrontier 中定义了2个 容器, inbound 和outbound

inbound 容器存储的是那些即将要处理的crawlUrI, heritrix 爬取到的链接, 准备处理的链接都是先放在inbound 当中.

outbound 容器存储的当前要处理的crawlUrI, Frontier 链接工厂会从outbound取出链接并处理


    /** inbound updates: URIs to be scheduled, finished; requested state changes */

    transient protected ArrayBlockingQueue inbound;

    /** outbound URIs */ 

    transient protected ArrayBlockingQueue outbound;



AbstractFrontier启动时实例化 inbound , outbound

inbound 的容量是outbound 的十倍
    public void start() {
        if(isRunning()) {
            return; 
        }
        
        if (getRecoveryLogEnabled()) try {
            initJournal(loggerModule.getPath().getFile().getAbsolutePath());
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
        
        this.outboundCapacity = getOutboundQueueCapacity();
        this.inboundCapacity = outboundCapacity * 
            getInboundQueueMultiple();
        outbound = new ArrayBlockingQueue<CrawlURI>(outboundCapacity, true);
        inbound = new ArrayBlockingQueue<InEvent>(inboundCapacity, true);
        pause();
        startManagerThread();
    }



inbound中存的是一个个等处理的事件
从inbound中处理这些事件

    /**
     * Drain the inbound queue of update events, or at the very least
     * wait until some additional delayed-queue URI becomes available. 
     * 
     * @throws InterruptedException
     */
    protected void drainInbound() throws InterruptedException {
        int batch = inbound.size();
        for(int i = 0; i < batch; i++) {
            inbound.take().process();
        }
        if(batch==0) {
            // always do at least one timed try
            InEvent toProcess = inbound.poll(getMaxInWait(),
                    TimeUnit.MILLISECONDS);
            if (toProcess != null) {
                toProcess.process();
            }
        }
    }


未完,待续。。。。
2
0
分享到:
评论
1 楼 zm0226 2012-12-29  
请问下,Heritrix 1.14和Heritrix 3.0的关系是什么啊?为什么都是最新版本呢?

相关推荐

    heritrix3.2源码

    Heritrix 3.2 源码的分析和理解有助于开发者深入掌握爬虫技术,定制自己的爬虫解决方案。 首先,让我们了解一下Heritrix 3.2 的核心特性: 1. **模块化设计**:Heritrix 3.2 采用组件化的架构,使得不同的爬取功能...

    heritrix源码

    8. **日志和监控**:Heritrix提供了详细的日志记录,包括错误日志、调试日志等,便于分析和调试。同时,可以通过JMX(Java Management Extensions)进行远程监控和管理。 9. **学习资源**:压缩包中的“Heritrix...

    heritrix1.14.4源码+项目

    这个“Heritrix1.14.4源码+项目”压缩包包含的是Heritrix 1.14.4版本的源代码和相关项目文件,对于学习和理解Web爬虫的工作原理,以及进行自定义开发是非常有价值的。 Heritrix的核心功能是通过模拟浏览器行为来...

    heritrix1.14.4源码包

    heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...

    Heritrix源码分析11-15.pdf

    ### Heritrix源码分析(十一):Heritrix中的URL——CandidateURI和CrawlURI #### 一、概述 Heritrix是一款开源的网络爬虫工具,它主要用于归档和备份网页数据。Heritrix的设计非常灵活且可扩展性强,能够支持多种...

    Heritrix3手册翻译

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

    Heritrix源码分析

    通过对这些包的分析,我们可以看到Heritrix是一个高度模块化和可定制的爬虫。每个组件都有明确的职责,这使得Heritrix能够适应各种复杂的网络抓取需求。深入理解这些源码,有助于开发者定制自己的爬虫策略,实现特定...

    heritrix的学习-源码分析 1-10

    ### Heritrix源码分析知识点概述 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,由Internet Archive开发并维护。它主要用于网页归档和大规模网络爬取任务。Heritrix的设计理念是高度可配置性和扩展性,...

    扩展Heritrix3指定链接爬取

    在网上找了许多关于Heritrix的资源,但是关于新版本heritrix3的资源很少,最近由于项目需要,认真读了heritrix的源码,扩展了Heritrix3指定链接提取,内容详细,可以在实际中使用。

    Heritrix1.14.4(含源码包)

    Heritrix 1.14.4是该软件的一个较早版本,包含了完整的源码,因此用户可以对其进行深度定制和调试。 在开始使用Heritrix 1.14.4之前,你需要了解以下几个核心知识点: 1. **爬虫基础**:Heritrix是一个Web爬虫,其...

    Heritrix 源码和Jar

    在"Heritrix 源码和Jar"这个主题中,我们可以深入探讨以下几个知识点: 1. **Heritrix的架构**: Heritrix采用模块化设计,由多个组件构成,包括URL队列管理器、下载器、解析器、存储模块等。用户可以根据需要定制...

    扩展Heritrix3指定内容提取.pdf

    标题中提到的“扩展Heritrix3指定内容提取”意味着本文档...这些知识点涵盖了Heritrix3扩展内容提取的主要方面,对于希望深入了解和应用Heritrix3进行网页数据抓取和信息提取的用户来说,这些知识具有重要的指导意义。

    lucene2.0+Heritrix配套源码

    《lucene2.0+Heritrix配套源码》是一个针对搜索引擎开发的资源包,包含了构建自定义搜索引擎所需的关键组件。Lucene是一个流行的全文搜索引擎库,而Heritrix则是一个强大的网页抓取工具,用于收集互联网上的数据。这...

    Lucene+Heritrix 源码

    **Lucene 和 Heritrix 源码分析** 在IT领域,搜索引擎的开发是一项复杂而重要的任务,它涉及到大量的文本处理、索引构建以及高效的查询算法。Lucene 和 Heritrix 是两个开源工具,分别专注于搜索的核心算法和网页...

    heritrix3种子载入方式

    Heritrix3允许用户通过编写自定义的种子载入模块,并集成到爬虫框架中,这通常涉及到对Heritrix3内部API的深入了解和Java编程能力。 需要注意的是,Heritrix3的种子载入配置文件是可扩展的,用户可以通过继承和扩展...

    heritrix-3

    总的来说,Heritrix 3 是一个强大而灵活的网络爬虫工具,适用于研究、数据分析和存档等任务。无论是直接使用预编译的发行版,还是基于源代码进行定制,都能满足不同程度的需求。如果你对互联网数据有兴趣,Heritrix ...

    Heritrix3-可扩展web级别的Java爬虫项目

    6. **日志与监控**:Heritrix3提供了丰富的日志记录和监控功能,可以帮助用户追踪爬虫的运行状态,分析抓取效果,及时发现和解决问题。 在使用Heritrix3时,开发者需要了解以下几个关键组件: 1. **Crawler ...

    heritrix-3.2.0 源码

    分析源码中的线程管理和同步机制是学习的重点。 7. **日志和调试**:理解Heritrix的日志系统,以及如何通过日志信息跟踪和调试爬虫运行过程。 **源码分析步骤** 1. **阅读项目结构**:先大致浏览项目目录,了解各...

    Heritrix爬虫源码

    5. **数据存储**:抓取后的数据可以存储为本地文件、数据库或者云存储,便于后续的数据分析和处理。 6. **日志记录**:设置合适的日志级别和格式,监控爬取过程中的异常和性能,帮助优化爬虫效率。 通过研究这个...

    heritrix-1.14.4爬虫框架及源码

    这个版本的源码和编译后的二进制文件分别以"heritrix-1.14.4.zip"和"heritrix-1.14.4-src.zip"的名义提供,允许用户进行深入研究、学习或二次开发。 在Heritrix中,爬虫的主要工作流程包括种子管理、URL过滤、内容...

Global site tag (gtag.js) - Google Analytics