Почему Nutch, кажется, не знает о "Last-Modified"? - PullRequest
2 голосов
/ 10 августа 2009

Я настроил Nutch с db.fetch.interval.default 60000, чтобы я мог ползти каждый день. Если я этого не сделаю, он не будет даже смотреть на мой сайт, когда я ползаю на следующий день. Но когда я выполняю сканирование на следующий день, каждая страница, которую он получил вчера, получает код ответа 200, указывающий, что он не использует дату предыдущего дня в «If-Modified-Since». Разве это не должно пропускать выборку страниц, которые не изменились? Есть ли способ заставить это сделать это? Я заметил ProtocolStatus.NOT_MODIFIED в 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 ]

6 голосов
/ 11 августа 2009

Я нашел проблему. Это ошибка в 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();

Теперь я вижу 304 в моих журналах Apache, где я должен их видеть.

0 голосов
/ 10 августа 2009

Я думаю, что вы ошиблись с именем опции - db.fetch.interval.default. Должно быть.

db.default.fetch.interval

Количество дней после извлечения каждой введенной страницы, чтобы ее можно было затем выбрать. 30 по умолчанию.

Я только что прочитал журнал изменений последней версии и обнаружил следующее

  1. NUTCH-61 - Поддержка адаптивного интервала повторного извлечения и обнаружения немодифицированный контент. (Аb)

Если у вас не установлена ​​последняя версия, я советую вам сделать это.

Кроме того, вы используете опцию -adddays для сканирования?

...