尽管我愿意接受其他Heritrix建议,但我相信需要帮助来编译Heritrix决定规则。

我需要抓取网站的整个副本(在crawler-beans.cxml种子列表中),但不必抓取任何外部(非站点)页面。应该下载呈现当前网站所需的所有外部资源,但是不要跟随指向异地页面的任何链接,而只能访问当前页面/域的资产。

例如,呈现页面所需的CDN内容可能托管在外部域(可能是AWS或Cloudflare)上,因此我需要下载该内容,并遵循所有域上链接,但是不遵循任何链接转到当前域范围之外的页面。

最佳答案

您可以使用3个决定规则:


第一个使用ContentTypeNotMatchesRegexDecideRule接受所有非HTML页面。
第二个接受当前域中的所有URL。
第三个拒绝所有不在该域中并且不直接的页面
从域访问(AlsoCheckVia选项)


所以像这样:

<bean id="scope" 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.ContentTypeNotMatchesRegexDecideRule">
    <property name="decision" value="ACCEPT"/>
    <property name="regex" value="(?i)html|wml"/>
   </bean>
   <bean class="org.archive.modules.deciderules.surt.SurtPrefixedDecideRule">
    <property name="decision" value="ACCEPT"/>
    <property name="surtsSource">
     <bean class="org.archive.spring.ConfigString">
      <property name="value">
       <value>
        http://(org,yoursite,
       </value>
      </property>
     </bean>
    </property>
   </bean>
   <bean class="org.archive.modules.deciderules.surt.NotSurtPrefixedDecideRule">
    <property name="decision" value="REJECT"/>
    <property name="alsoCheckVia" value="true"/>
    <property name="surtsSource">
     <bean class="org.archive.spring.ConfigString">
      <property name="value">
       <value>
        http://(org,yoursite,
       </value>
      </property>
     </bean>
    </property>
   </bean>
  </list>
 </property>
</bean>

09-29 19:55