关键词查询:一次全站扫描被中断后怎样判断已覆盖范围

📍 WDQWDWQD987AAAAA:216.73.217.20
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /020d309a09a2.html
📄

关键词查询:一次全站扫描被中断后怎样判断已覆盖范围

中断后不要从“扫了多少条”推断覆盖范围,而要先确认扫描是否留下了可续跑的状态。判断依据是两件事:扫描任务是否按页或按批次记录了已完成集合,以及你的查询对象是页面清单还是关键词结果集。前者决定能否精确续跑,后者决定你只能做抽样验证。缺少状态记录时,已覆盖范围无法精确还原,只能重新扫描或接受一个带不确定性的下界。

先看扫描是否留下可续跑的完成记录

全站扫描通常按两种方式推进:一种是边发现 URL 边查询,完成状态只存在于内存或日志尾部;另一种是先把 URL 清单落盘,再分批查询并标记批次状态。中断后打开任务目录或日志,检查是否存在已处理清单、批次编号或断点文件。如果存在,已覆盖范围就是已完成批次的并集,续跑时跳过这些批次即可,代价只是重新校验清单有没有在中断前被截断。

如果只有一条“已处理 N 条”的计数,没有对应的 ID 列表,那么 N 只能当作下界。原因在于计数可能包含重复、失败重试或写入未提交的记录。此时更稳妥的动作是重新拉取一份 URL 清单,与日志中的时间戳和最后一条记录做交集核对。核对结果若显示清单规模远大于 N,说明覆盖范围不足,应重新扫描而不是续跑。

按查询对象区分:页面集合可续跑,结果集只能抽样

关键词查询的扫描对象有两种,中断后的处理方式不同。

判断依据是任务开始时有没有固定输入清单。有固定清单的属于前者,可以续跑;没有固定清单、靠结果反推输入的属于后者,续跑会引入口径不一致。一个实际动作是:从已完成部分随机抽取若干条,用同一查询条件重跑,比较两次结果的重合度。重合度高说明口径稳定,可以继续;重合度低说明结果集不稳定,应重新定义扫描边界。

用一组可核对的指标估算缺口,而不是看单一数字

中断后最容易被误读的是“扫描量归零”或“抓取量骤降”。这些现象可能来自任务被终止,也可能来自限流、目标站点返回异常或本地写入失败。仅凭计数下降不能证明覆盖正确或错误。更可靠的做法是同时核对三项:已处理 ID 的数量、清单总规模、以及失败记录的比例。三者放在一起才能判断缺口是“未开始”还是“已开始但未完成”。

假设一次扫描的清单有 5000 个 URL,日志显示已处理 1800 条,其中失败 200 条。已覆盖范围不是 1800,而是 1600 条成功记录;失败部分需要单独重试,不能算作已覆盖。这个例子只用于说明比较方法,不代表任何真实任务的规模。下一步动作是先重试失败项,再处理剩余 3200 条,而不是直接从第 1801 条继续。

前提变化后,续跑与重扫的取舍条件

是否续跑取决于扫描开始后关键前提有没有变化。如果目标站点的结构、URL 规则或查询口径在中断前后保持一致,续跑是合理选择,能节省重复查询。如果前提已经变化,例如站点改版、URL 规则调整或查询条件变更,那么已完成部分与剩余部分的数据口径不同,续跑会产生混合结果,此时应重新扫描。

具体判断可以这样做:对比中断前后各取一条已完成记录,检查字段结构、URL 格式和结果字段是否一致。一致则续跑,不一致则重扫。例外情况是,已完成部分只用于内部参考、不参与对外结论时,可以保留并标注口径差异,但这需要在使用时明确说明,不能默认两段数据可合并。

收尾动作:把覆盖范围写成可复核的结论

无论续跑还是重扫,最后都应把覆盖范围写成一句可复核的话,例如“已完成 1600 条成功记录,失败 200 条待重试,剩余 3200 条未处理,口径与中断前一致”。这句话里的每个数字都应能对应到日志或清单中的具体记录。如果做不到,说明覆盖范围仍是不确定的,应继续核对而不是直接进入下一步分析。

图1 图2

nginx