Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web crawler 为什么';纳奇似乎知道;“上次修改”吗;?_Web Crawler_Nutch - Fatal编程技术网

Web crawler 为什么';纳奇似乎知道;“上次修改”吗;?

Web crawler 为什么';纳奇似乎知道;“上次修改”吗;?,web-crawler,nutch,Web Crawler,Nutch,我将Nutch的db.fetch.interval.default设置为60000,这样我就可以每天爬行。如果我不这样做,第二天我爬网的时候它甚至都不会看我的网站。但是,当我第二天抓取时,它昨天抓取的每个页面都会被抓取200响应代码,这表明它没有在“If Modified Since”中使用前一天的日期。它不应该跳过获取未更改的页面吗?有没有办法做到这一点?我注意到在Fetcher.java中有一个ProtocolStatus.NOT_修改,所以我认为它应该能够做到这一点,不是吗 顺便说一下,这

我将Nutch的db.fetch.interval.default设置为60000,这样我就可以每天爬行。如果我不这样做,第二天我爬网的时候它甚至都不会看我的网站。但是,当我第二天抓取时,它昨天抓取的每个页面都会被抓取200响应代码,这表明它没有在“If Modified Since”中使用前一天的日期。它不应该跳过获取未更改的页面吗?有没有办法做到这一点?我注意到在Fetcher.java中有一个ProtocolStatus.NOT_修改,所以我认为它应该能够做到这一点,不是吗

顺便说一下,这是从当前主干的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>

db.default.fetch.interval
30
(已弃用)重新获取页面之间的默认天数。
db.fetch.interval.default
2592000
重新获取页面之间的默认秒数(30天)。

我想您弄错了选项名-db.fetch.interval.default。应该是

db.default.fetch.interval

获取每个注入页面后,下一次应获取该页面的天数。默认为30

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

  • NUTCH-61-支持自适应重新提取间隔和检测 未修改的内容。(ab)
  • 如果您没有安装最新版本,我建议您这样做


    另外,您是否使用-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中标记为“不推荐”。