Heritrix3 爬虫任务配置详解
Heritrix3 作为一款专业的网络爬虫框架,其强大的配置系统允许用户精细控制爬取行为。本文将深入解析如何配置 Heritrix3 的爬取任务,帮助开发者掌握核心配置技巧。
基础任务配置
Heritrix3 的任务配置主要通过修改 crawler-beans.cxml
文件实现,该文件采用 Spring 框架的配置方式。
爬取限制设置
通过 CrawlLimitEnforcer 组件可以设置三种关键限制:
-
数据量限制 (maxBytesDownload)
- 设置爬取的总字节数上限
- 示例:
<property name="maxBytesDownload" value="100000000" />
表示限制为100MB
-
文档数量限制 (maxDocumentDownload)
- 控制爬取的文档总数
- 示例:
<property name="maxDocumentsDownload" value="100" />
限制100个文档
-
时间限制 (maxTimeSeconds)
- 设定爬取持续时间(秒)
- 示例:
<property name="maxTimeSeconds" value="10000" />
约2.7小时
注意:这些限制是软性限制,当达到阈值时会触发优雅终止,正在处理的URI仍会完成。
线程数配置
maxToeThreads 参数控制并发线程数:
- 对于少于100个主机的域爬取,建议设置为主机数的2倍
- 通常150-200线程足够,除非机器资源特别强大
- 示例:
<property name="maxToeThreads" value="50" />
操作者联系信息
metadata.operatorContactUrl 是重要的礼貌性设置:
- 提供网站管理员联系渠道
- 示例:
metadata.operatorContactUrl=http://www.archive.org
Robots协议策略
robotsPolicyName 支持四种策略:
- obey/classic:遵守robots.txt和meta标签
- robotsTxtOnly:仅遵守robots.txt
- ignore:完全忽略
配置示例:
<property name="robotsPolicyName" value="obey"/>
技术细节:
- 支持RFC 9309路径通配符(*, $)
- 仅识别meta标签中的"nofollow"指令
- 单独的rel=nofollow由ExtractorHTML的obeyRelNoFollow控制
爬取范围控制
Heritrix3 使用DecideRules系统精细控制爬取范围,每个URI会经过一系列规则判断(ACCEPT/REJECT/PASS)。
核心决策规则详解
-
基础规则:
- AcceptDecideRule:接受所有URI
- RejectDecideRule:拒绝所有URI
- SeedAcceptDecideRule:接受种子URI
-
路径相关规则:
- PathologicalPathDecideRule:拒绝重复路径段(如/a/a/a/a/)
- TooManyPathSegmentsDecideRule:限制路径段数量
-
内容相关规则:
- ContentLengthDecideRule:基于内容长度过滤
- ContentTypeMatchesRegexDecideRule:按MIME类型过滤
-
域名控制规则:
- SurtPrefixedDecideRule:基于SURT格式的域名前缀匹配
- OnDomainsDecideRule:特定域名白名单
-
高级规则:
- ScriptedDecideRule:支持JSR-223脚本自定义逻辑
- TransclusionDecideRule:控制非导航链接的深度
调试决策流程
可通过日志记录查看决策过程:
- 修改logging.properties:
org.archive.modules.deciderules.DecideRuleSequence.level = FINEST
- 启动时指定日志配置:
-Djava.util.logging.config.file=/path/to/logging.properties
边界控制(Frontier)配置
Frontier管理URI调度,影响爬取效率和礼貌性。
礼貌性设置
-
延迟控制三要素:
- delayFactor:延迟系数(基于上次抓取时间)
- maxDelayMs:最大延迟(毫秒)
- minDelayMs:最小延迟(毫秒)
示例配置:
<property name="delayFactor" value="5.0" /> <property name="maxDelayMs" value="30000" /> <property name="minDelayMs" value="3000" />
-
带宽限制:
- maxPerHostBandwidthUsageKbSec:单主机带宽限制(KB/s)
- 示例:
<property name="maxPerHostBandwidthUsageKbSec" value="500" />
重试策略
- maxRetries:最大重试次数(默认30)
- retryDelaySeconds:重试间隔(秒,默认900)
示例:
<property name="retryDelaySeconds" value="900" />
<property name="maxRetries" value="30" />
链接提取控制
- extract404s:是否从404页面提取链接(默认true)
- extractIndependently:是否独立提取(默认false)
站点特定配置(Sheets)
Sheets系统允许为特定域名覆盖默认设置:
- 可按顶级域(com/net/org)或二级域配置
- 支持任意深度的属性路径覆盖
- 实现精细化的站点级控制策略
通过掌握这些配置技巧,您可以构建出既高效又礼貌的专业网络爬虫,满足各种复杂的爬取需求。建议从默认配置开始,通过小规模测试逐步调整,最终形成适合特定场景的优化配置。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考