不要凭进度条剩余百分比判断,也不要直接重跑整站。更可靠的做法是先读扫描日志里的“最后完成条目”,再决定是续跑还是重扫。中断时的覆盖范围通常介于“已完成页面的最后一条记录”和“尚未写入日志的抓取队列”之间,这段模糊区正是判断难点。
全站扫描类工具一般边抓取边写入结果,进度条反映的是任务调度进度,日志反映的是落盘记录。两者更新节奏不同,中断后就会出现矛盾:界面显示已扫过大半,日志里却只有一小部分页面有完整记录。
常见解释有两种。第一种是写入延迟:抓取线程已经处理完页面,但结果还在缓冲区或队列里没落盘,中断时这批数据丢失,实际覆盖小于界面显示。第二种是任务重试:工具对超时页面自动重试,进度条把重试计入总量,日志却只保留最终成功的那条,导致界面数字偏大而日志条目偏少。
区分这两种解释,看日志里是否出现同一URL的多条时间戳记录。有重复时间戳且间隔很短,偏向重试;没有重复但最后几条记录时间戳明显早于中断时刻,偏向写入延迟。
无论哪种原因,第一步都是固定边界,而不是立刻重启任务。具体动作:从日志中找出最后一条状态为完成的记录,记下它的URL、抓取时间和当时的响应状态,再往后翻若干条,看是否存在状态为进行中或失败的条目。
这个动作的结果直接决定下一步。如果最后完成记录之后紧跟的是明确的失败条目,说明中断点清晰,可以从失败条目开始续跑。如果最后完成记录之后是空白或只有进行中状态,说明中断点不明确,续跑可能重复抓取也可能漏抓,此时重扫更稳妥,代价是消耗一次完整抓取额度。
边界确认后,还需要验证已覆盖部分是否真的可用。从日志里已完成的URL中分层抽样,至少覆盖首页、列表页、详情页各若干条,逐条打开对应页面的扫描结果,检查标题、状态码、内链数量等字段是否有值。
如果抽样页面字段完整,说明已覆盖部分可作为后续分析的基础,续跑只需补齐边界之后的部分。如果抽样中出现字段为空或明显异常,说明中断前已存在写入问题,此时已覆盖范围不可信,应重扫并检查工具的结果写入设置,而不是继续追加任务。
假设某次扫描在完成约六成页面时中断,日志最后一条完成记录时间戳比中断时刻早了两分钟,且抽样页面字段完整。这种组合偏向写入延迟而非数据损坏,可以续跑;反之,若抽样页面大量为空,即使进度条显示完成度高,也应重扫。
如果工具本身不提供断点续跑能力,或续跑入口的具体位置和当前是否可用无法确认,应以实际界面为准,必要时联系工具方核实,不要按旧教程假设功能存在。
完成判断后,把最后完成URL、中断时刻、抽样结果、最终选择续跑还是重扫记在同一份记录里。下次再遇到中断,可以直接对照边界特征,不必重新摸索。记录本身不保证结果准确,但能让判断过程可追溯,减少凭进度条下结论带来的偏差。