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

heritrix ELFHash多线程抓取

阅读更多
1.添加了org.archive.crawler.frontier.ELFHashQueueAssignmentPolicy.java
引用

public class ELFHashQueueAssignmentPolicy extends QueueAssignmentPolicy {

private static final Logger logger = Logger
.getLogger(ELFHashQueueAssignmentPolicy.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 String getClassKey(String uri) {
// String uri = cauri.getUURI().toString();
long hash = ELFHash(uri);
String a = Long.toString(hash % 100);
return a;
}

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);
}

public static void main(String args[]){
ELFHashQueueAssignmentPolicy el=new ELFHashQueueAssignmentPolicy();
String a=el.getClassKey("http://www.chinanews.com.cn/");
System.out.println(a);
}

}







2.修改了AbstractFrontier 类的AbstractFrontier方法
/**
         * 自己添加修改的配置----------------------------
         */
        String queueStr = System.getProperty(AbstractFrontier.class.getName() +
                "." + ATTR_QUEUE_ASSIGNMENT_POLICY,
                ELFHashQueueAssignmentPolicy.class.getName() + " " +
                IPQueueAssignmentPolicy.class.getName() + " " +
                BucketQueueAssignmentPolicy.class.getName() + " " +
                SurtAuthorityQueueAssignmentPolicy.class.getName() + " " +
                TopmostAssignedSurtQueueAssignmentPolicy.class.getName());
        Pattern p = Pattern.compile("\\s*,\\s*|\\s+");
       /**
        * -----------------------------------------------
        */


3.修改了heritrix.properties
修改为

引用

#############################################################################
# FRONTIER
#############################################################################

# List here all queue assignment policies you'd have show as a
# queue-assignment-policy choice in AbstractFrontier derived Frontiers
# (e.g. BdbFrontier).
org.archive.crawler.frontier.AbstractFrontier.queue-assignment-policy = org.archive.crawler.frontier.ELFHashQueueAssignmentPolicy org.archive.crawler.frontier.IPQueueAssignmentPolicy org.archive.crawler.frontier.BucketQueueAssignmentPolicy org.archive.crawler.frontier.SurtAuthorityQueueAssignmentPolicy org.archive.crawler.frontier.TopmostAssignedSurtQueueAssignmentPolicy
org.archive.crawler.frontier.BdbFrontier.level = INFO



要新建一个job才有效,否则还是默认的HostnameQueueAssignmentPolicy
还有,有时候只是散列出30个DNS就关闭。
解决方法1,增加入口连接
        2,对这个job重新建立以下with exist




因为heritrix1.14.4 默认认为你的站点是按每个域名来爬的, 修改成一个站点多个线程, 会有一定问题, 比如导致很多次执行同样的DNS。建议使用heritrix3, heritrix3能支持这个功能
2
2
分享到:
评论
1 楼 xtuali 2012-12-23  
Heritrix3好像默认也是单线程的,不知道在哪配置呢?谢谢!

相关推荐

    heritrix抓取的操作和扩展

    它的整体结构包括多个组件,协同工作以实现高效和可控的网页抓取。 配置和使用Heritrix主要包括以下几个步骤: 1. **安装与配置**:首先,从官方站点下载最新版本的Heritrix并解压缩。核心配置文件`heritrix....

    heritrix3.2

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

    web爬虫Heritrix.zip

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

    Heritrix爬虫框架 完整版

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

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

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

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

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

    heritrix系统使用.ppt

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

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

    开发自己的搜索引擎是一项复杂且具有挑战性的任务,涉及信息检索、数据处理、网络爬虫等多个领域的知识。在这个过程中,Lucene 和 Heritrix 是两个非常关键的工具,它们分别在搜索引擎的构建中扮演着不同的角色。 ...

    heritrix抓取指南

    《Heritrix抓取指南》 Heritrix是一款强大的网络爬虫工具,广泛应用于数据采集和分析。本指南将详细介绍如何利用Heritrix抓取淘宝商城大家电分类下的空调商品信息。 首先,确定我们的目标:抓取淘宝商城空调商品...

    heritrix-1.14.4

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

    heritrix-1.14.4爬虫框架及源码

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

    Heritrix相关PPT

    Mohr Gordon可能是一位专家或讲师,他分享了Heritrix如何通过多线程和并发处理来提高抓取效率,以及如何利用HTTP协议进行网页请求和响应。此外,这个PPT可能还讨论了Heritrix如何处理JavaScript、Cookie和Session等...

    网络爬虫Heritrix1.14.4可直接用

    Heritrix是一款强大的开源网络爬虫工具,由互联网档案馆(Internet Archive)开发,主要用于抓取和保存网页内容。Heritrix 1.14.4是该软件的一个较早版本,但依然具有广泛的适用性,尤其对于学习和研究网络爬虫技术...

    heritrix3.1 官方指导手册

    Heritrix 支持分布式部署模式,可以在多台机器上并行执行抓取任务,大大提高了抓取速度和效率。 #### 二十八、Heritrix 3.x API 指南 Heritrix 提供了一套丰富的 API 接口,用户可以利用这些接口开发定制化的应用...

    很好的heritrix学习资料

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

    heritrix-3.1.0 最新jar包

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

    Heritrix—开发自己的搜索引擎

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

Global site tag (gtag.js) - Google Analytics