为什么Nutch似乎不知道"Last-Modified"?

Pau*_*lin 2 web-crawler nutch

我使用60000的db.fetch.interval.default设置Nutch,这样我每天都可以爬行.如果我不这样做,那么当我第二天爬行时,它甚至都不会看我的网站.但是当我第二天抓取时,昨天获取的每个页面都会获得一个200响应代码,表明它没有在"If-Modified-Since"中使用前一天的日期.它不应该跳过提取未更改的页面吗?有没有办法让它做到这一点?我注意到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>
Run Code Online (Sandbox Code Playgroud)

Pau*_*lin 6

我发现了这个问题.这是Nutch的一个错误.我已经通过电子邮件发送了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();
Run Code Online (Sandbox Code Playgroud)

现在我在我的Apache日志中看到304s,我应该看到它们.