我将Nutch的db.fetch.interval.default设置为60000,这样我就可以每天爬行了。如果我不这样做,它甚至不会在我第二天爬行时查看我的网站。但是当我第二天爬网时,它昨天获取的每个页面都会得到一个200响应代码,这表明它没有在“If-Modified- next”中使用前一天的日期。它不应该跳过获取没有改变的页面吗?有没有办法让它做到这一点?我注意到Fetcher.java中有一个ProtocolStatus.NOT_MODIFIED,所以我认为它应该能够做到这一点,不是吗?
顺便说一下,这是从当前主干的conf/nutch-default.xml剪切并粘贴的:
<!-- web db properties -->
<property>
<name>db.default.fetch.interval</name>
<value>30</value>
<description>(DEPRECATED) The default number of days between re-fetches of a page.
</description>
</property>
<property>
<name>db.fetch.interval.default</name>
<value>2592000</value>
<description>The default number of seconds between re-fetches of a page (30 days).
</description>
</property>发布于 2009-08-10 21:04:06
我找到问题了。这是Nutch的一个bug。我已经给Nutch开发者列表发了邮件,但我的解决方法是:
Index: src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java
===================================================================
--- src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java (revision 802632)
+++ src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java (working copy)
@@ -124,11 +124,15 @@
reqStr.append("\r\n");
}
- reqStr.append("\r\n");
if (datum.getModifiedTime() > 0) {
reqStr.append("If-Modified-Since: " + HttpDateFormat.toString(datum.getModifiedTime()));
reqStr.append("\r\n");
}
+ else if (datum.getFetchTime() > 0) {
+ reqStr.append("If-Modified-Since: " + HttpDateFormat.toString(datum.getFetchTime()));
+ reqStr.append("\r\n");
+ }
+ reqStr.append("\r\n");
byte[] reqBytes= reqStr.toString().getBytes();现在我在我的Apache日志中看到了304,而我应该看到它们。
发布于 2009-08-09 21:13:39
我想你搞错了一个选项名称-- db.fetch.interval.default。应该是这样的。
db.default.fetch.interval
在获取每个注入的页面之后的天数,接下来应该获取该页面。默认情况下为30。
我刚刚阅读了最新版本的更改日志,发现了以下内容
如果您没有安装最新版本,我建议您安装最新版本。
另外,您是否正在使用-adddays选项进行爬行?
https://stackoverflow.com/questions/1252289
复制相似问题