Как я могу исключить все, кроме текста / HTML из сканирования Heritrix?
Вкл.: Случаи использования Heritrix есть сценарий использования "Хранить только успешные HTML-страницы"
Моя проблема: я не знаю, как реализовать это в моем CXML-файле. В частности: добавляя ContentTypeRegExpFilter к ARCWriterProcessor => установите для его параметра регулярного выражения значение text/html.*. ... В примере файлов cxml отсутствует ContentTypeRegExpFilter.
2 ответа
Сценарии использования, которые вы цитируете, несколько устарели и относятся к Heritrix 1.x (фильтры были заменены правилами выбора, совсем другой структурой конфигурации). Тем не менее основная концепция остается той же.
Файл cxml в основном является конфигурационным файлом Spring. Вам необходимо настроить свойство shouldProcessRule
на боб 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)
Ответ Криса - только половина правды (по крайней мере с Heritrix 3.1.x, который я использую). A DecideRule возвращает ПРИНЯТЬ, ОТКАЗАТЬ или ОТСУТСТВУЕТ. Если правило возвращает NONE, это означает, что это правило "не имеет мнения" по этому поводу (как ACCESS_ABSTAIN в Spring Security). Теперь ContentTypeMatchesRegexDecideRule (как и все другие MatchesRegexDecideRule) можно настроить так, чтобы он возвращал решение, если регулярное выражение совпадает (настраивается двумя свойствами "решение" и "регулярное выражение"). Параметр означает, что это правило возвращает решение ПРИНЯТЬ, если регулярное выражение соответствует, но возвращает NONE, если оно не соответствует. И, как мы уже видели, 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>
Чтобы избежать загрузки изображений, фильмов и т. Д., Сконфигурируйте компонент "scope" с помощью MatchesListRegexDecideRule, который REJECTs 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>