Heritrix3.1.1是老外写的爬虫,可配置性非常好,但是有一点不好,老外很懂礼貌,所以这个爬虫也很懂礼貌,爬起来非常的慢,1万多个链接,一天也爬不完。
仔细研究它的源代码和文档,网上的文档非常的少,基本要看源代码。
根据网上的这篇文档https://webarchive.jira.com/wiki/display/Heritrix/Politeness+parameters
这个爬虫对网站的礼貌主要是单线程,对同一网站只有一个线程。。。好吧,这个我们没什么办法了,因为它是单线的。
第二个可以设置的地方是politeness参数,这个线程取一个url,处理完成以后,在处理队列里的下一个url之前,先要睡一小觉(snooze),而睡多长时间,是由DispositionProcessor这个bean来决定的,里面有好几个参数,基本上是根据前一个uri的抓取需要的时间,乘上delayFactor来决定。。。缺省的设置是5倍,就是说,如果前一个uri花了1秒来获取,那么这个线程就要睡5秒。
处理的代码片断如下:
/**
* Update any scheduling structures with the new information in this
* CrawlURI. Chiefly means make necessary arrangements for no other URIs at
* the same host to be visited within the appropriate politeness window.
*
* @param curi
* The CrawlURI
* @return millisecond politeness delay
*/
protected long politenessDelayFor(CrawlURI curi) {
long durationToWait = 0;
Map<String,Object> cdata = curi.getData();
if (cdata.containsKey(A_FETCH_BEGAN_TIME)
&& cdata.containsKey(A_FETCH_COMPLETED_TIME)) {
long completeTime = curi.getFetchCompletedTime();
long durationTaken = (completeTime - curi.getFetchBeginTime());
durationToWait = (long)(getDelayFactor() * durationTaken);
long minDelay = getMinDelayMs();
if (minDelay > durationToWait) {
// wait at least the minimum
durationToWait = minDelay;
}
long maxDelay = getMaxDelayMs();
if (durationToWait > maxDelay) {
// wait no more than the maximum
durationToWait = maxDelay;
}
long respectThreshold = getRespectCrawlDelayUpToSeconds() * 1000;
if (durationToWait<respectThreshold) {
// may need to extend wait
CrawlServer s = getServerCache().getServerFor(curi.getUURI());
String ua = curi.getUserAgent();
if (ua == null) {
ua = metadata.getUserAgent();
}
Robotstxt rep = s.getRobotstxt();
if (rep != null) {
long crawlDelay = (long)(1000 * rep.getDirectivesFor(ua).getCrawlDelay());
crawlDelay =
(crawlDelay > respectThreshold)
? respectThreshold
: crawlDelay;
if (crawlDelay > durationToWait) {
// wait at least the directive crawl-delay
durationToWait = crawlDelay;
}
}
}
long now = System.currentTimeMillis();
int maxBandwidthKB = getMaxPerHostBandwidthUsageKbSec();
if (maxBandwidthKB > 0) {
// Enforce bandwidth limit
ServerCache cache = this.getServerCache();
CrawlHost host = cache.getHostFor(curi.getUURI());
long minDurationToWait = host.getEarliestNextURIEmitTime()
- now;
float maxBandwidth = maxBandwidthKB * 1.024F; // kilo factor
long processedBytes = curi.getContentSize();
host
.setEarliestNextURIEmitTime((long)(processedBytes / maxBandwidth)
+ now);
if (minDurationToWait > durationToWait) {
durationToWait = minDurationToWait;
}
}
}
return durationToWait;
}
仔细看一下上面的代码,发现maxDelayMs这个参数可以直接设置为0。。。哈哈,改了一下再试,这个线程就没法睡觉了。。。睡啥啊,干完活想睡多久睡多久
<bean id="disposition" class="org.archive.crawler.postprocessor.DispositionProcessor">
<!-- <property name="delayFactor" value="5.0" /> -->
<!-- <property name="minDelayMs" value="3000" /> -->
<!-- <property name="respectCrawlDelayUpToSeconds" value="300" /> -->
<property name="maxDelayMs" value="0" />
<!-- <property name="maxPerHostBandwidthUsageKbSec" value="0" /> -->
</bean>
实战结果统计为:
0.57 URIs/sec (0.64 avg); 35 KB/sec (28 avg)
而之前这个值为:
0.1 URIs/sec (0.07 avg) 6 KB/sec(4 avg)
提升了5倍左右
相关推荐
较新的网络爬虫,能用源码,可以抓取任何网站上的所有链接,很强大,好东东,值得下载,学习
heritrix抓取指南heritrix抓取指南 heritrix抓取指南
对heritrix抓取的操作和扩展 里面有MirrorWriterProcessor扩展的类文件修改
NULL 博文链接:https://badxy.iteye.com/blog/860874
Heritrix是按多线程方式抓取的爬虫,主线程把任务分配给Teo线程(处理线程),每个Teo线程每次处理一个URL。Teo线程对每个URL执行一遍URL处理器链。URL处理器链包括如下5个处理步骤。整个流程都在图2.1中。 (1)预取链...
Heritrix User Manual https://webarchive.jira.com/wiki/display/Heritrix/Heritrix3 Heritrix3(或简称H3)指Heritrix的3.0发布。 目前官方的Heritrix 3.0.0版已经发布(2009年12月)。 后续的发行H3将是3.0.1...
heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置heritrix正确完整的配置
在/Heritrix1/src/org/archive/crawler/Heritrix.java启动之后,访问https://localhost:8089登录admin密码admin直接用
Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。本文详细介绍了 Heritrix 在 Eclipse 中的配置、运行。
按照这个步骤安装绝对会让你安装成功的。步骤非常的清晰。Heritrix是一个不错的选择。网络爬虫,更快更好的帮你捕捉到你想要的网页
Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。官网下载好像要翻墙,我下下来方便大家使用,这是3.4版本,配合heritrix-3.4.0-SNAPSHOT-dist.zip使用
heritrix系统使用、一个ppt 介绍heritrix的基本概念、以及原理知识
包含: heritrix-3.1.0-dist.zip heritrix-3.1.0-src.zip 官网下载地址。
开发自己的搜索引擎,Heritrix是一种网页抓取的有效工具
Heritrix是一个开源,可扩展的web爬虫项目。用户可以使用它来从网上抓取想要的资源。Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取...
heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...
Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑
heritrix-3.1.0 最新官网jar包。包括heritrix-3.1.0-dist.zip包与heritrix-3.1.0-src.zip包。是爬虫神器
Heritrix使用详解与高级开发应用 Heritrix开发应用详细
爬虫时我们会使用heritrix,搭建工程时要导入这些jar包,该jar包是1.14.0版本的。