中断后的第一步不是重跑,而是判断中断前已经覆盖了哪些页面、哪些页面只是排队未处理。只有把“已抓取并写入结果”和“已进入队列但未完成”分开,才能决定是续跑剩余部分还是整站重扫。
全站扫描被中断时,最容易误判的是把“已发现链接”当成“已处理页面”。假设一个情境:某站点约八千个可访问 URL,扫描进行到大约四成时进程被终止。恢复后如果只看总数,会以为已完成四成,但实际可能包含三类不同状态的记录。
判断动作:打开输出文件,按“最后写入时间”排序,找到中断时刻附近的记录边界。如果输出是逐条追加的,边界之后的记录基本可以视为未完成;如果输出是批量写入的,则要看最后一批是否完整落盘。这个动作的结果直接决定下一步:边界清晰就续跑,边界模糊就缩小范围重扫。
当输出文件没有可靠时间戳时,可以抽取一批已知 URL 做对照。做法是从站点地图或栏目页取若干条链接,逐条在输出结果中查找是否存在对应记录。
这里要注意适用条件:样本成立不代表整体成立。如果抽取的样本恰好集中在扫描早期处理的栏目,会高估覆盖范围;如果集中在后期栏目,会低估。因此样本要跨栏目、跨层级抽取,并记录每条样本属于哪个栏目,再按栏目分别统计命中率。
假设抽查了五个栏目各二十条链接,其中三个栏目命中率接近全部,两个栏目命中率很低。合理的解释不是“扫描覆盖了六成”,而是“扫描在进入后两个栏目之前被中断”。这个推断会改变下一步:只需针对低命中栏目重扫,而不必整站重来。
同样是中断,原因不同,续跑的安全性也不同。需要先看中断是外部终止还是内部异常。
如果工具支持断点续跑,先确认续跑依据的是哪份状态记录——是输出文件本身,还是单独的队列文件。两者不一致时,以输出文件为准更稳妥,因为队列文件可能包含大量未真正处理的链接。具体工具的行为需要以实际版本和日志为准,不能凭印象假定。
把上面的信息汇总后,可以用三个条件做取舍。
这三个条件没有固定权重,取决于你对结果准确度的要求。如果这份扫描只是用于内部排查,续跑加抽样校验通常够用;如果要交付给他人或用于后续批量处理,边界不清时重扫更省事。
无论最终选择续跑还是重扫,都应在结果中标注覆盖边界,而不是只给一个总数。可以记录:扫描时间区间、已处理 URL 数量、未处理部分的范围说明、以及哪些栏目是抽样验证过的。
这样做的实际影响是:下游拿到结果时,能判断哪些结论可以整体使用,哪些只能用于已验证的栏目。如果省略这一步,一个覆盖六成的扫描结果很容易被当成全站结论使用,后续决策就会建立在错误前提上。