【问题标题】:How do i exclude everything but text/html from a heritrix crawl?如何从 heritrix 爬网中排除除 text/html 之外的所有内容?
【发布时间】:2011-03-30 10:58:36
【问题描述】:

在:Heritrix Usecases 有一个“仅存储成功的 HTML 页面”的用例

我的问题:我不知道如何在我的 cxml 文件中实现它。尤其: 将 ContentTypeRegExpFilter 添加到 ARCWriterProcessor => 将其正则表达式设置设置为 text/html.*。 ... 示例 cxml 文件中没有 ContentTypeRegExpFilter。

【问题讨论】:

    标签: indexing search-engine web-crawler cxml heritrix


    【解决方案1】:

    Kris 的回答只说对了一半(至少对于我正在使用的 Heritrix 3.1.x)。 DecideRule 返回 ACCEPT、REJECT 或 NONE。如果规则返回 NONE,则意味着该规则对此“没有意见”(如 Spring Security 中的 ACCESS_ABSTAIN)。现在ContentTypeMatchesRegexDecideRule(与所有其他MatchesRegexDecideRule 一样)可以配置为在正则表达式匹配时返回决定(由两个属性“decision”和“regex”配置)。该设置意味着如果正则表达式匹配,则此规则返回 ACCEPT 决定,但如果 not 匹配则返回 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 配置“范围”bean,以拒绝具有众所周知的文件扩展名的 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>
    

    【讨论】:

      【解决方案2】:

      您引用的用例有些过时,并参考 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 匹配的项目,而后者又只传递那些内容类型(mime 类型)与提供的正则表达式匹配的项目。

      注意“决定”设置。你在我们外面统治事情吗? (我的示例规定了所有内容,排除了任何不匹配的内容)。

      由于shouldProcessRule 继承自处理器,因此可以将其应用于任何处理器。

      有关配置 Heritrix 3 的更多信息,请访问 Heritrix 3 Wiki(crawler.archive.org 上的用户指南是关于 Heritrix 1)

      【讨论】:

      • 有一点错别字。正则表达式属性 缺少斜线
      猜你喜欢
      • 2012-11-13
      • 2010-11-26
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 2020-07-06
      • 2012-04-10
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多