代码之家  ›  专栏  ›  技术社区  ›  Paul Tomblin

为什么纳奇不知道“上次修改”?

  •  2
  • Paul Tomblin  · 技术社区  · 15 年前

    我设置nutch的db.fetch.interval.default为60000,这样我可以每天爬行。如果我不这样做,第二天爬的时候它甚至看不到我的网站。但是当我在第二天抓取时,它昨天抓取的每个页面都会得到一个200响应代码,这表明它没有在“if modified since”中使用前一天的日期。它不应该跳过提取未更改的页面吗?有办法做到这一点吗?我注意到一个protocolstatus.not_在fetcher.java中进行了修改,所以我认为它应该能够做到这一点,不是吗?

    顺便说一下,这是从当前主干的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>
    
    2 回复  |  直到 15 年前
        1
  •  6
  •   Paul Tomblin    15 年前

    我发现了问题。这是一个疯子。我已经给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,我应该在那里看到它们。

        2
  •  0
  •   Sorantis    15 年前

    我认为您错误地使用了选项名-db.fetch.interval.default。应该是这样。

    db.default.fetch.interval(默认获取间隔)

    在每次注入的页面被提取之后,下一次应该被提取的天数。30默认情况下。

    我刚刚阅读了最新版本的更改日志,发现了以下内容

    1. Nutch-61-支持自适应重取间隔和检测 未修改的内容。(ab)

    如果您没有安装最新版本,我建议您这样做。

    另外,您是否使用-adddays选项进行爬行?