开:Heritrix Usecases有一个“仅存储成功的HTML页面”的用例
我的问题:我不知道如何在我的cxml文件中实现它。特别: 将ContentTypeRegExpFilter添加到ARCWriterProcessor =>将其正则表达式设置为text / html。*。 ... 示例cxml Files中没有ContentTypeRegExpFilter。
答案 0 :(得分:6)
Kris的回答只是事实的一半(至少我正在使用Heritrix 3.1.x)。 DecideRule返回ACCEPT,REJECT或NONE。如果规则返回NONE,则表示此规则对此没有“意见”(如Spring Security中的ACCESS_ABSTAIN)。现在ContentTypeMatchesRegexDecideRule(与所有其他MatchesRegexDecideRule一样)可以配置为在正则表达式匹配时返回决策(由两个属性“decision”和“regex”配置)。设置意味着如果正则表达式匹配,此规则将返回ACCEPT决定,但如果不匹配则返回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>
为了避免完全下载图像,电影等,请使用MatchesListRegexDecideRule配置“scope”bean,该URL使用众所周知的文件扩展名来拒绝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>
答案 1 :(得分:1)
您引用的用例有些过时并且引用了Heritrix 1.x(过滤器已被替换为决策规则,非常不同的配置框架)。基本概念仍然是一样的。
cxml文件基本上是一个Spring配置文件。您需要将ARCWriter bean上的属性shouldProcessRule
配置为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匹配的项目,而DecideRule仅传递内容类型(mime类型)与提供的正则表达式匹配的项目。
小心'决定'设置。你是在统治我们的事吗? (我的例子规定了事情,排除了任何不匹配的东西)。
由于shouldProcessRule
继承自处理器,因此可以应用于任何处理器。
有关配置Heritrix 3的更多信息,请参阅Heritrix 3 Wiki(crawler.archive.org上的用户指南与Heritrix 1相关)