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

Heritrix多线程的问题

阅读更多
  我现在是用一台主机抓取数据,所以我想把Heritrix的链接散列到多个线程中,可是当我散列的ELFHashQueueAssignmentPolicy写好后,第一次执行的时候,只能解析出30个dns:任务就自动的结束了,可是,当第二次或是第三次的时候,就可以实现多个线程了
另外我已经把Heritrix.properties文件和AbstractFrontier中相应的位置都已经改了,希望您能帮我看看,谢谢了。


/*******************************************************************************
* 文件说明:
*
* 项目名: WebCrawler
* 文件名: ELFHashAssignmentPolicy.java
* 包名: com.hotct.heritrixExt.common.frontier
*
* 创建人: zhangzhenxin
* 创建时间: 下午03:50:01
* 创建日期: 2007-10-30
******************************************************************************/
package com.hotct.heritrixExt.common.frontier;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.httpclient.URIException;
import org.archive.crawler.datamodel.CandidateURI;
import org.archive.crawler.framework.CrawlController;
import org.archive.crawler.frontier.HostnameQueueAssignmentPolicy;
import org.archive.crawler.frontier.QueueAssignmentPolicy;
import org.archive.net.UURI;
import org.archive.net.UURIFactory;

/**
* <h>类型描述</h>
*
* @author zhangzhenxin
* @date 2007-10-30
*/
public class ELFHashAssignmentPolicy extends QueueAssignmentPolicy {

private static final Logger logger = Logger
.getLogger(ELFHashAssignmentPolicy.class.getName());

private static String DEFAULT_CLASS_KEY = "default...";

private static final String DNS = "dns";
/**
*
*/
@Override
public String getClassKey(CrawlController controller, CandidateURI cauri) {
String uri = cauri.getUURI().toString();
String scheme = cauri.getUURI().getScheme();
String candidate = null;

try {
if (scheme.equals(DNS)) {
if (cauri.getVia() != null) {
// Special handling for DNS: treat as being
// of the same class as the triggering URI.
// When a URI includes a port, this ensures
// the DNS lookup goes atop the host:port
// queue that triggered it, rather than
// some other host queue
UURI viaUuri = UURIFactory.getInstance(cauri.flattenVia());
candidate = viaUuri.getAuthorityMinusUserinfo();
// adopt scheme of triggering URI
scheme = viaUuri.getScheme();
} else {
candidate = cauri.getUURI().getReferencedHost();
}
} else {
// String uri = cauri.getUURI().toString();
long hash = ELFHash(uri);
candidate = Long.toString(hash % 100);
}

if (candidate == null || candidate.length() == 0) {
candidate = DEFAULT_CLASS_KEY;
}
} catch (URIException e) {
logger.log(Level.INFO,
"unable to extract class key; using default", e);
candidate = DEFAULT_CLASS_KEY;
}

return candidate.replace(':', '#');
}

public static long ELFHash(String str) {
long hash = 0;
long x = 0;
for (int i = 0; i < str.length(); i++) {
hash = (hash << 4) + str.charAt(i);
if ((x = hash & 0xF0000000L) != 0) {
hash ^= (x >> 24);
hash &= ~x;
}
}
return (hash & 0x7FFFFFFF);
}

}
分享到:
评论
1 楼 D04540214 2008-04-06  
我也遇到相同的问题 ,不知道lz有没有解决 ?

相关推荐

    Heritrix爬虫框架 完整版

    3. **多线程处理**:Heritrix支持多线程爬取,能同时处理多个连接,提高了爬取效率,尤其是在处理大量网页时。 4. **元数据管理**:Heritrix能够收集并存储关于抓取内容的元数据,如HTTP响应头、网页编码、抓取时间...

    heritrix系统使用.ppt

    为了解决这个问题,可以使用如ELF哈希算法来平均分配URL到不同的队列,从而实现更有效的多线程同步。 在Heritrix系统中,爬取过程可以分为四个关键部分: 1. **Page Fetching**:这是从Frontier获取URI并处理的...

    Heritrix部署直接能运行的项目

    主题爬虫:集中于被选择的问题。 持续爬虫:不仅仅爬更当前的网页还负责爬日后更新的网页。 实验爬虫:对爬虫技术进行实验,以决定该爬什么,以及对不同协议的爬虫爬行结果进行分析的。 Heritrix的主页是...

    heritrix-1.14.4

    2. **多线程处理**:Heritrix使用多线程来并行处理多个URL,提高了抓取效率。这使得它能够在短时间内处理大量网页。 3. **内容处理**:Heritrix不仅仅抓取HTML,还支持各种Web内容类型,如图片、PDF、XML等,并可以...

    heritrix-3.2.0

    - **多线程处理**:Heritrix 使用多线程模型,高效地并发处理多个网页抓取任务。 - **内容解析**:Heritrix 支持多种网页格式,包括HTML、XML、PDF等,能解析并提取出有价值的信息。 - **存储与归档**:抓取的...

    heritrix3.2源码

    3. **多线程处理**:Heritrix 使用多线程并行处理请求,提高了爬取效率。 4. **内容处理与存储**:Heritrix 支持多种格式的网页内容处理,包括HTML、XML、PDF等,并能将抓取的数据存储在各种后端,如文件系统、...

    heritrix3.2

    3. **多线程与并发**:Heritrix 3.2 支持多线程和并发处理,可以同时处理多个HTTP请求,提高抓取效率。通过调整线程池参数,用户可以根据网络状况和服务器负载优化抓取速度。 4. **数据存储与处理**:Heritrix 内置...

    heritrix-1.14.4爬虫框架及源码

    例如,Heritrix采用多线程设计,每个组件如fetcher、parser和archiver都在自己的线程中运行,以实现高并发性和高效能。此外,源码还可能包含详细的注释,解释了如何配置和扩展Heritrix。 在学习和使用Heritrix时,...

    Heritrix—开发自己的搜索引擎

    5. **分布式爬取**:为了处理大规模的网页抓取任务,Heritrix支持多线程和分布式部署。通过集群化设置,可以在多台服务器上分散负载,提高抓取效率。 6. **存储与索引**:抓取的网页内容通常需要进一步处理和索引...

    heritrix-3

    - **多线程处理**:Heritrix支持并发抓取,能有效提高抓取效率。 - **内容处理**:除了抓取网页,Heritrix还可以处理各种类型的内容,如图片、视频、PDF等,且支持多种数据存储格式,如WARC(Web ARChive)。 - **...

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

    2. **线程模型**:Heritrix3使用多线程处理,每个线程负责处理一个URL,这样可以实现并行抓取,提高抓取效率。同时,它还具备自动调度功能,以防止对目标网站造成过大的压力。 3. **配置管理**:Heritrix3通过XML...

    web爬虫Heritrix.zip

    Heritrix是按多线程方式抓取的爬虫,主线程把任务分配给Teo线程(处理线程),每个Teo线程每次处理一个URL。Teo线程对每个URL执行一遍URL处理器链。URL处理器链包括如下5个处理步骤。整个流程都在图2.1中。 (1)预取链...

    heritrix相关文档(定时任务,增量,多线程)[收集].pdf

    5. **ToeThreads**:这是实际执行抓取工作的线程组,负责预处理、抓取、提取、写入/索引和后处理等步骤。每个抓取的URL都会经过这个处理链。 在抓取过程中,Frontier与Processor Chains形成了一个循环。Frontier将...

    开源的爬虫软件Heritrix3.1.0

    3. **多线程处理**:Heritrix使用多线程技术并行处理任务,提高了爬取效率,能够快速抓取大量网页。 4. **支持多种格式**:Heritrix可以处理HTML、XML、PDF等多种格式的网页,同时支持对JavaScript渲染的内容进行...

    开发自己的搜索引擎——Lucene+Heritrix

    开发者可以利用Lucene对大量数据进行快速高效的全文检索,同时Lucene还支持多线程和分布式搜索,适合构建大规模的搜索引擎。 2. **Heritrix**: Heritrix是互联网档案馆开发的一款可配置、可扩展的网络抓取工具,...

Global site tag (gtag.js) - Google Analytics