结论是有条件的:如果扫描任务留下了可核对的任务日志或进度记录,并且记录能对应到具体URL清单,那么你可以按“已处理清单+日志时间戳”判断覆盖范围;如果工具只显示了一个百分比进度条、中断后连已处理列表都打不开,那么这次扫描的覆盖范围实际上不可判断,只能重跑或缩小范围重跑。下面说明怎么区分这两种情况,以及一个会让判断失效的反例。
判断覆盖范围不靠回忆,靠中断那一刻留下的痕迹。按可靠程度从高到低排,大致有这几类:
实际操作上,先做一件事:把工具里所有和本次任务有关的输出(日志、导出、任务详情页)全部保存下来,再动手重跑。原因是很多工具在重新发起任务时会覆盖或清空上一次的会话记录,一旦覆盖,可核对痕迹就没了。保存动作的结果直接决定你下一步是“按差集补跑”还是“整站重跑”。
覆盖范围=总表里被处理过的部分。所以你需要一份独立于工具的全站URL总表,来源可以是自己维护的链接清单、站内链接抓取结果,或从后台导出的内容列表。把日志或已完成清单与总表对齐后,未覆盖部分就是差集。
这里有个容易踩的坑:进度条显示的百分比,分母往往是工具自己估算的总量,可能包含重定向、参数页、重复URL。所以进度条到60%中断,不代表总表里60%的URL被处理过。以总表差集为准,不以百分比为准。
如果差集很小,比如只剩一小段列表页,那补跑差集就够;如果差集很大或无法对齐(URL格式、大小写、参数规范化不一致),整站重跑更省事。
假设你的日志里有完整的URL和处理时间,看起来覆盖范围很清楚。但如果这次扫描是并发执行的,日志写入顺序不等于实际处理顺序,而且中断时可能有若干条记录“已发出请求但结果还没写回”。这种情况下,日志末尾会缺失一批实际已处理的URL,也可能出现已处理但未落盘的重复。此时按日志尾部切分覆盖范围就会偏小或错位。
判断方法:看日志里是否存在大量时间戳相同或极接近的连续记录。如果有,说明是并发批次写入,尾部不可信,应该把最后一批整体视为“状态未知”,而不是精确的断点。这个反例说明:有日志不等于覆盖范围可精确判断,还要看日志的写入方式是否与处理方式一致。
不是所有中断都值得挽救。可以按原因分两类处理:
区分证据:看已处理记录里是否有异常状态(大量超时、空结果、重复请求同一URL)。如果异常比例明显偏高,续跑会把问题带进最终结果。
确定覆盖范围后,建议的动作顺序是:先对差集发起一次范围更小的补跑,补跑完成后从补跑结果和原结果中各抽少量URL做人工核对,确认两批结果口径一致。如果抽样发现补跑结果与原结果字段、判定标准不一致,说明两次任务参数不同,此时应放弃拼接,改为整站一次性重跑。这个动作的结果会告诉你:覆盖范围是可以拼回来的,还是必须推倒重来。
如果工具本身不提供日志、导出或断点信息,具体能力需要以你所用工具的当前版本说明为准,不要假设它一定有续跑或导出功能。在无法核对的情况下,把任务拆成若干小范围分批执行,是比追求“一次全站”更可控的做法。