处理爬虫日志里的重复或冲突信号,核心不是急着删日志,而是先确认“谁在重复、冲突发生在哪一层”。同一 URL 被多次抓取、同一时间出现不同状态码、同一 IP 对应多个 User-Agent,这些现象可能来自正常重试、CDN 回源、多台爬虫节点或日志采集重复。多人协作时,应先把原始日志分层标记,再按“观察—判断—处理—复查”走一遍,避免直接改规则导致返工。
重复信号通常有三类:同一秒内同 IP、同 UA、同 URL 出现多条;同一请求在边缘节点和源站各记一次;日志采集端因重试写入两条。冲突信号则表现为同一 URL 在相近时间出现 200 和 404、200 和 301、或不同 UA 得到不同状态码。
可以先做一张最小核对表:
如果日志里没有请求唯一标识,重复和冲突就很难区分。此时应先补采集字段,而不是凭 IP 和 URL 猜。
判断依据是“同一逻辑请求是否被拆成多条物理记录”。若同一 Request ID 在 CDN 和源站各出现一次,且状态码一致,可以合并为一条访问记录,保留两个来源字段。若状态码不同,例如边缘返回 200、源站记录 499 或 502,不能简单合并,应标记为“链路冲突”,因为它反映的是不同环节的真实结果。
对于同一 URL 被同一爬虫短时间重复抓取,先看 robots.txt 是否允许、页面是否返回 200、是否有 Retry-After 或 429。若爬虫忽略抓取限制继续高频请求,这属于抓取行为问题;若站点地图里同一 URL 重复出现,可能诱导重复抓取,但站点地图不保证收录,也不能当作索引控制手段。
冲突信号还要区分“可能原因”和“已经定位的原因”。同一 URL 出现 200 和 404,可能是发布回滚、缓存不一致、多机房版本不同,也可能是日志时间错位。只有拿到同一 Request ID 或同一时间窗口的源站记录,才能说已经定位。
多人协作时,建议把处理结果落成三个文件,而不是只在聊天里说结论。
edge-2025-06-01.log、origin-2025-06-01.log。假设示例,仅说明命名方式。dup_group、conflict_type、source_layer 三个字段。重复记录填同一 dup_group;冲突记录填 status_mismatch 或 ua_mismatch。处理冲突时不要直接删掉“看起来不对”的那条。先确认哪条来自边缘、哪条来自源站,再决定以哪层为准。若涉及索引移除,要记住 robots.txt 的抓取限制不等于可靠的索引移除;已收录 URL 的移除需要按各搜索引擎提供的移除方式分别核查。
复查不是再看一遍总数,而是验证处理规则是否稳定。可以固定检查以下项目:
如果复查发现同一冲突反复出现,说明处理规则只覆盖了现象,没有覆盖产生原因。此时应回到采集字段和发布流程,而不是继续加过滤条件。
下一步可以直接做一件事:从最近一天日志里抽 50 条重复或冲突记录,按上面的三个文件结构试跑一遍,确认团队能否用同一套字段说清“重复在哪、冲突在哪、以哪层为准”。