Web crawler 为什么';纳奇似乎知道;“上次修改”吗;?
我将Nutch的db.fetch.interval.default设置为60000,这样我就可以每天爬行。如果我不这样做,第二天我爬网的时候它甚至都不会看我的网站。但是,当我第二天抓取时,它昨天抓取的每个页面都会被抓取200响应代码,这表明它没有在“If Modified Since”中使用前一天的日期。它不应该跳过获取未更改的页面吗?有没有办法做到这一点?我注意到在Fetcher.java中有一个ProtocolStatus.NOT_修改,所以我认为它应该能够做到这一点,不是吗 顺便说一下,这是从当前主干的conf/nutch-default.xml中剪切和粘贴的:Web crawler 为什么';纳奇似乎知道;“上次修改”吗;?,web-crawler,nutch,Web Crawler,Nutch,我将Nutch的db.fetch.interval.default设置为60000,这样我就可以每天爬行。如果我不这样做,第二天我爬网的时候它甚至都不会看我的网站。但是,当我第二天抓取时,它昨天抓取的每个页面都会被抓取200响应代码,这表明它没有在“If Modified Since”中使用前一天的日期。它不应该跳过获取未更改的页面吗?有没有办法做到这一点?我注意到在Fetcher.java中有一个ProtocolStatus.NOT_修改,所以我认为它应该能够做到这一点,不是吗 顺便说一下,这
<!-- 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>
db.default.fetch.interval
30
(已弃用)重新获取页面之间的默认天数。
db.fetch.interval.default
2592000
重新获取页面之间的默认秒数(30天)。
我想您弄错了选项名-db.fetch.interval.default。应该是
db.default.fetch.interval
获取每个注入页面后,下一次应获取该页面的天数。默认为30
我刚刚阅读了最新版本的变更日志,发现如下内容
另外,您是否使用-adddays选项进行爬网?我发现了问题。这简直是一只虫子。我已通过电子邮件向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日志中看到了304s,我应该在那里看到它们。您使用的是哪个版本的Nutch?我使用的是svn主干,上次更新大约是5天前。svn更新版本为802613,-adddays选项做什么?它是db.fetch.interval.default(以及db.fetch.interval.max、db.fetch.schedule.class、db.fetch.schedule.adaptive.inc_rate等)在nutch-default.xml中。我假设名称就在那里,特别是因为当我更改它时,它似乎会有所不同。adddays选项将时钟提前多少天,不管您指定多少天。我非常确定它的db.default.fetch.interval.db.default.fetch.interval在主干中的nutch-default.xml中标记为“不推荐”。