判断采集是否遗漏,核心不是看采集总量多不多,而是把“已知链接集合”与“实际可达链接集合”做交叉比对:先建立一份可复现的链接清单,再检查清单里每个链接是否被采集过、采集结果是否有效、是否还有入口未被清单覆盖。只要这三步中有一步对不上,就说明存在遗漏,而不是采集工具本身一定有问题。
链接分析里常说的采集遗漏,实际可能指三种不同情况,处理方式完全不同。
这三种情况的表现相似,都是“结果里没有”,但排查方向相反。先定位属于哪一类,再决定改入口、改抓取规则还是改解析逻辑。
最直接的做法是准备两份清单:一份是入口清单,即你确认应该被采集的链接来源;另一份是结果清单,即采集完成后实际产出的链接记录。两份清单按规范化后的URL做匹配,差异部分就是遗漏候选。
入口清单至少要覆盖:
结果清单则要包含:请求URL、最终URL、HTTP状态码、抓取时间、解析状态。比对时先做URL规范化,去掉无意义的会话参数和锚点,再判断差异。否则同一页面因参数不同会被误判成遗漏。
比对出差异后,不要立刻认定是遗漏。逐项检查以下条件,只有全部通过才说明该链接确实应该被采集:
假设某列表页有200条链接,结果清单只有180条,差异20条。逐项检查后发现其中15条返回404,3条被robots排除,2条解析为空。那么真正的遗漏是那2条解析失败的链接,而不是全部20条。这个判断结果直接决定下一步是修解析规则,而不是扩大抓取范围。
交叉比对只能发现“已知入口”中的遗漏。要判断是否还有未被入口清单覆盖的链接,可以用两种方法。
增量对比:在相同条件下重复采集一次,比较两次结果清单的差异。如果第二次多出链接,说明第一次存在未发现或未抓取的情况。注意两次之间页面内容可能变化,差异需要人工确认。
抽样验证:从结果清单中随机抽取若干页面,检查其正文内链是否都出现在结果清单中。如果抽到的页面里有链接未入库,说明入口覆盖不完整,需要补充链接来源。
这两种方法各有代价。增量对比需要重复执行,耗时较长,但能发现动态变化导致的遗漏;抽样验证成本低,但只能推断整体情况,不能保证覆盖全部隐藏链接。入口来源稳定、页面更新不频繁时,抽样验证足够;页面由脚本动态生成或分页极深时,增量对比更可靠。
确认遗漏类型后,按以下顺序处理,避免同时改动多个环节导致无法定位问题:
每次只改一层,改完后重新执行交叉比对,确认差异是否缩小。如果差异没有变化,说明判断的类型不对,需要回到第一步重新分类。
下一步可以做的具体动作是:选一个已知页面,手动列出它包含的全部链接,与采集结果逐条比对,记录每条差异的原因。这份记录比任何总量指标都更能说明采集是否真的遗漏。