先看中断发生在哪一步:如果扫描已经跑完抓取阶段,只是报表生成或导出被切断,已覆盖范围通常接近全量,重跑代价低;如果中断发生在抓取队列仍在推进时,你手上只有一部分结果,必须用可核对的日志与抽样来界定边界。不要只凭“进度条停在哪”下结论,进度条可能按任务数、URL 数或时间估算,三种口径的剩余量完全不同。
能拿到运行日志时,优先核对日志中的“已处理 URL 数”和“最后一条成功记录的时间戳”。把这两项与扫描启动前的 URL 清单总量对比,可以判断中断是接近完成还是中途停止。若日志显示最后一条记录的时间明显早于中断时刻,说明队列可能已经空转或卡住,实际覆盖范围小于表面进度。
只剩导出文件时,无法确认导出是否包含全部已抓取记录。此时应把导出文件中的 URL 去重后计数,再与站点地图或已知入口清单做交集比对。交集比例只能说明“这些已知入口被覆盖了多少”,不能反推全站覆盖比例,因为未在清单中的 URL 可能从未进入队列。
选择依据可以归纳为:有日志就查队列状态,没日志就查已知入口的命中情况。两者都不满足时,唯一可靠动作是重新扫描,而不是修补旧结果。
多个角色对“覆盖了多少”有不同理解,通常是因为各自引用了不同口径。把分歧拆成以下三项,逐项核对,才能判断是否需要补扫。
核对后如果发现三方引用的分母不一致,先统一分母,再谈覆盖范围。这一步不做,后续补扫范围会反复变化。
假设站点有 5000 个已知 URL,中断后导出文件含 3200 条去重记录,日志显示最后成功记录时间比中断时刻早 4 分钟。此时不要直接认定覆盖率为 64%。可以随机抽取 100 个已知 URL,检查它们在导出文件中的命中数。若命中 98 个,说明抓取阶段可能已接近完成,缺失主要集中在队列尾部;若命中 60 个,说明中断发生在中段,补扫范围需要覆盖大部分 URL。
这个抽样的结果只用于决定下一步动作:命中率高时,可以针对未命中的 URL 做小范围补扫;命中率低时,直接重跑全站比修补更省事。抽样本身不证明全站覆盖率,它只是把“要不要重跑”变成一个可比较的判断。
如果扫描工具在中断后自动清理了临时队列,日志中可能没有完整的已处理记录。此时任何基于日志的推断都不成立,只能以导出文件为准,并明确告知相关角色“覆盖范围未知”。
如果站点包含大量动态参数或无限滚动页面,已知 URL 清单本身可能不完整,抽样命中也无法代表全站。这种情况下,判断覆盖范围的意义有限,更实际的做法是重新扫描并限制参数范围,避免再次中断。
如果中断原因是目标站点主动限流或封禁,重跑前需要先确认访问条件是否恢复。否则第二次扫描可能在相同位置再次中断,覆盖范围仍然无法确定。具体工具的队列保留策略、日志字段和限流表现需要以该工具的实际说明为准,不要套用其他工具的默认行为。
最后,把“已覆盖范围”写成一句可核对的话:在什么口径下、基于哪份日志或导出、覆盖了哪些已知入口、还有哪些未确认。这句话能直接决定下一步是补扫、重跑还是暂停,而不是继续争论一个百分比。