先给结论:不要在同一轮里既验证原修复、又处理新异常。把日志按“请求身份—前置条件—响应结果—后续动作”四段切开,找到两类异常共同依赖的那一个环节,先固定它,再分别验证。如果共同依赖是缓存、重定向或鉴权,优先用单变量对照,而不是继续加规则。
假设你为了减少重复抓取,给某类列表页加了参数归一化规则。上线后,原先正常的详情页抓取量下降,同时出现一批新的 403。此时不能直接断定是归一化规则导致,因为 403 也可能来自频率限制、鉴权过期或边缘节点策略。可区分的证据是:
这里的关键动作是:从日志中抽出规则生效前后各一段样本,按 URL 模板分组,而不是按总量看。总量下降不能单独证明处理正确,因为抓取预算调整、站点地图更新、外部链接变化都会造成类似现象。只有分组后仍呈现“规则覆盖组异常、未覆盖组正常”,才值得继续拆依赖链。
蜘蛛日志分析容易犯的错,是把所有字段平铺成检查清单。更有效的做法是按请求生命周期拆段:
拆段的目的,是找到两类异常共同依赖的那一段。比如原修复改的是“前置条件”中的参数,新异常出现在“响应结果”中的 403,那么共同依赖可能是鉴权签名把参数也算进去了。此时继续改参数规则只会让签名更不一致。
假设一个具体场景:你为修复重复抓取,把带 ?ref= 的 URL 统一 301 到无参数版本。上线后,部分详情页开始返回 403。可执行的处理方案是:
这个动作的结果会直接决定下一步:若确认是参数参与签名,就应把归一化规则从“重定向”改为“保留参数但 canonical 指向无参版本”,并单独验证 canonical 是否被正确读取。若确认不是签名问题,就应暂停归一化规则的回退,先恢复原抓取路径,再排查鉴权变更。
个别样本正常,不代表规模化后不会出现例外。常见边界有三类:
要判断属于哪类,可以在日志中按时间窗口和节点标识分组。如果异常集中在某个时间窗口之后,频率或状态边界更可能;如果异常分散在不同节点,缓存边界更可能。这里不能把抓取量归零或某项统计下降单独当作处理正确的证据,因为维护窗口、爬虫调度变化也会造成同样现象。
当修复引发新异常时,建议按以下顺序执行,每一步都留下可对比的日志切片:
这个顺序的取舍是:牺牲一轮修复速度,换取依赖关系清晰。若你的站点规模小、规则改动少,也可以先保留修复、只隔离异常 URL 模板,但必须记录隔离前后的日志差异,否则下一轮仍无法判断是修复有效还是异常被掩盖。最终判断标准不是某类请求变多或变少,而是两类异常是否被拆到不同依赖段后分别消失。