Как исключить все, кроме text/html, из обхода heritrix?

На: Случаи использования Heritrix есть вариант использования для "Только хранить успешные HTML-страницы"

Моя проблема: я не знаю, как реализовать это в моем файле cxml. Особенно: добавление ContentTypeRegExpFilter в ARCWriterProcessor => установите для его параметра регулярного выражения значение text/html.*. ... В образцах файлов cxml нет ContentTypeRegExpFilter.


person dgAlien    schedule 16.08.2010    source источник


Ответы (2)


Варианты использования, которые вы цитируете, несколько устарели и относятся к Heritrix 1.x (фильтры были заменены правилами принятия решений, совершенно другой структурой конфигурации). Тем не менее, основная концепция та же.

Файл cxml в основном представляет собой файл конфигурации Spring. Вам нужно настроить свойство shouldProcessRule в bean-компоненте ARCWriter, чтобы оно было ContentTypeMatchesRegexDecideRule

Возможная конфигурация ARCWriter:

  <bean id="warcWriter" class="org.archive.modules.writer.ARCWriterProcessor">
    <property name="shouldProcessRule">
      <bean class="org.archive.modules.deciderules.ContentTypeMatchesRegexDecideRule">
        <property name="decision" value="ACCEPT" />
        <property name="regex" value="^text/html.*">
      </bean>
    </property>
    <!-- Other properties that need to be set ... -->
  </bean>

Это приведет к тому, что процессор будет обрабатывать только те элементы, которые соответствуют DecideRule, который, в свою очередь, пропускает только те элементы, чей тип содержимого (тип mime) соответствует предоставленному регулярному выражению.

Будьте осторожны с настройкой «решение». Вы управляете вещами в нашем? (Мой пример управляет вещами, все, что не соответствует, исключено).

Поскольку shouldProcessRule унаследовано от процессора, его можно применить к любому процессору.

Дополнительную информацию о настройке Heritrix 3 можно найти на Heritrix 3 Wiki. (руководство пользователя на crawler.archive.org посвящено Heritrix 1)

person Kris    schedule 16.08.2010
comment
есть небольшая опечатка. отсутствует косая черта для свойства регулярного выражения ‹имя свойства=значение регулярного выражения=^text/html.*/› - person dgAlien; 25.08.2010

Ответ Криса — только половина правды (по крайней мере, с Heritrix 3.1.x, которую я использую). DecideRule возвращает ACCEPT, REJECT или NONE. Если правило возвращает NONE, это означает, что у этого правила «нет мнения» об этом (например, ACCESS_ABSTAIN в Spring Security). Теперь ContentTypeMatchesRegexDecideRule ( как и все остальные MatchesRegexDecideRule) можно настроить для возврата решения, если регулярное выражение соответствует (настраивается двумя свойствами «решение» и «регулярное выражение»). Параметр означает, что это правило возвращает решение ПРИНЯТЬ, если регулярное выражение совпадает, и возвращает НЕТ, если оно не совпадает. И, как мы видели, NONE не является мнением, так что shouldProcessRule оценивается как ACCEPT, потому что никаких решений не было принято.

Таким образом, чтобы архивировать только ответы с text/html* Content-Type, настройте DecideRuleSequence, где все по умолчанию ОТКЛОНЯЕТСЯ, и только выбранные записи будут ПРИНЯТЫ.

Это выглядит так:

 <bean id="warcWriter" class="org.archive.modules.writer.WARCWriterProcessor">
   <property name="shouldProcessRule">
     <bean class="org.archive.modules.deciderules.DecideRuleSequence">
       <property name="rules">
         <list>
           <!-- Begin by REJECTing all... -->
           <bean class="org.archive.modules.deciderules.RejectDecideRule" />
           <bean class="org.archive.modules.deciderules.ContentTypeMatchesRegexDecideRule">
             <property name="decision" value="ACCEPT" />
             <property name="regex" value="^text/html.*" />
           </bean>
         </list>
       </property>
     </bean>
   </property>
   <!-- other properties... -->
 </bean>

Чтобы избежать загрузки изображений, фильмов и т. д., настройте bean-компонент «scope» с помощью MatchesListRegexDecideRule, который ОТКЛОНЯЕТ URL-адреса с хорошо известными расширениями файлов, такими как:

<!-- ...and REJECT those from a configurable (initially empty) set of URI regexes... -->
<bean class="org.archive.modules.deciderules.MatchesListRegexDecideRule">
      <property name="decision" value="REJECT"/>
      <property name="listLogicalOr" value="true" />
      <property name="regexList">
       <list>
         <value>.*(?i)(\.(avi|wmv|mpe?g|mp3))$</value>
         <value>.*(?i)(\.(rar|zip|tar|gz))$</value>
         <value>.*(?i)(\.(pdf|doc|xls|odt))$</value>
         <value>.*(?i)(\.(xml))$</value>
         <value>.*(?i)(\.(txt|conf|pdf))$</value>
         <value>.*(?i)(\.(swf))$</value>
         <value>.*(?i)(\.(js|css))$</value>
         <value>.*(?i)(\.(bmp|gif|jpe?g|png|svg|tiff?))$</value>
       </list>
      </property>
</bean>
person James    schedule 02.10.2013