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();
}
}
}
未完,待续。。。。
分享到:
相关推荐
Heritrix 3.2 源码的分析和理解有助于开发者深入掌握爬虫技术,定制自己的爬虫解决方案。 首先,让我们了解一下Heritrix 3.2 的核心特性: 1. **模块化设计**:Heritrix 3.2 采用组件化的架构,使得不同的爬取功能...
8. **日志和监控**:Heritrix提供了详细的日志记录,包括错误日志、调试日志等,便于分析和调试。同时,可以通过JMX(Java Management Extensions)进行远程监控和管理。 9. **学习资源**:压缩包中的“Heritrix...
这个“Heritrix1.14.4源码+项目”压缩包包含的是Heritrix 1.14.4版本的源代码和相关项目文件,对于学习和理解Web爬虫的工作原理,以及进行自定义开发是非常有价值的。 Heritrix的核心功能是通过模拟浏览器行为来...
heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...
### Heritrix源码分析(十一):Heritrix中的URL——CandidateURI和CrawlURI #### 一、概述 Heritrix是一款开源的网络爬虫工具,它主要用于归档和备份网页数据。Heritrix的设计非常灵活且可扩展性强,能够支持多种...
Heritrix 3 是一款强大的网络爬虫工具,主要用于网页抓取和互联网存档。它在2009年12月发布了3.0.0版本,并随着时间的推移不断更新,提供了3.0.1补丁版和3.2.0版,增加了新的特性和功能,比如更简单的使用方式、持续...
通过对这些包的分析,我们可以看到Heritrix是一个高度模块化和可定制的爬虫。每个组件都有明确的职责,这使得Heritrix能够适应各种复杂的网络抓取需求。深入理解这些源码,有助于开发者定制自己的爬虫策略,实现特定...
### Heritrix源码分析知识点概述 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,由Internet Archive开发并维护。它主要用于网页归档和大规模网络爬取任务。Heritrix的设计理念是高度可配置性和扩展性,...
在网上找了许多关于Heritrix的资源,但是关于新版本heritrix3的资源很少,最近由于项目需要,认真读了heritrix的源码,扩展了Heritrix3指定链接提取,内容详细,可以在实际中使用。
Heritrix 1.14.4是该软件的一个较早版本,包含了完整的源码,因此用户可以对其进行深度定制和调试。 在开始使用Heritrix 1.14.4之前,你需要了解以下几个核心知识点: 1. **爬虫基础**:Heritrix是一个Web爬虫,其...
在"Heritrix 源码和Jar"这个主题中,我们可以深入探讨以下几个知识点: 1. **Heritrix的架构**: Heritrix采用模块化设计,由多个组件构成,包括URL队列管理器、下载器、解析器、存储模块等。用户可以根据需要定制...
标题中提到的“扩展Heritrix3指定内容提取”意味着本文档...这些知识点涵盖了Heritrix3扩展内容提取的主要方面,对于希望深入了解和应用Heritrix3进行网页数据抓取和信息提取的用户来说,这些知识具有重要的指导意义。
《lucene2.0+Heritrix配套源码》是一个针对搜索引擎开发的资源包,包含了构建自定义搜索引擎所需的关键组件。Lucene是一个流行的全文搜索引擎库,而Heritrix则是一个强大的网页抓取工具,用于收集互联网上的数据。这...
**Lucene 和 Heritrix 源码分析** 在IT领域,搜索引擎的开发是一项复杂而重要的任务,它涉及到大量的文本处理、索引构建以及高效的查询算法。Lucene 和 Heritrix 是两个开源工具,分别专注于搜索的核心算法和网页...
Heritrix3允许用户通过编写自定义的种子载入模块,并集成到爬虫框架中,这通常涉及到对Heritrix3内部API的深入了解和Java编程能力。 需要注意的是,Heritrix3的种子载入配置文件是可扩展的,用户可以通过继承和扩展...
总的来说,Heritrix 3 是一个强大而灵活的网络爬虫工具,适用于研究、数据分析和存档等任务。无论是直接使用预编译的发行版,还是基于源代码进行定制,都能满足不同程度的需求。如果你对互联网数据有兴趣,Heritrix ...
6. **日志与监控**:Heritrix3提供了丰富的日志记录和监控功能,可以帮助用户追踪爬虫的运行状态,分析抓取效果,及时发现和解决问题。 在使用Heritrix3时,开发者需要了解以下几个关键组件: 1. **Crawler ...
分析源码中的线程管理和同步机制是学习的重点。 7. **日志和调试**:理解Heritrix的日志系统,以及如何通过日志信息跟踪和调试爬虫运行过程。 **源码分析步骤** 1. **阅读项目结构**:先大致浏览项目目录,了解各...
5. **数据存储**:抓取后的数据可以存储为本地文件、数据库或者云存储,便于后续的数据分析和处理。 6. **日志记录**:设置合适的日志级别和格式,监控爬取过程中的异常和性能,帮助优化爬虫效率。 通过研究这个...
这个版本的源码和编译后的二进制文件分别以"heritrix-1.14.4.zip"和"heritrix-1.14.4-src.zip"的名义提供,允许用户进行深入研究、学习或二次开发。 在Heritrix中,爬虫的主要工作流程包括种子管理、URL过滤、内容...