先别重跑。中断后最有价值的产物是本次扫描留下的日志和结果文件,它们能告诉你哪些URL真的被处理过、处理到哪一步、哪些只是排进队列却没有结果。判断覆盖范围的核心不是看进度条走了多少,而是把“已产出结果的URL”“已抓取但未评分的URL”“从未进入队列的URL”三类分开,再决定是续跑、缩小范围重跑,还是直接进入内容处置。
全站扫描中断后,最容易犯的错是把“已发现URL数”当成“已覆盖URL数”。对判断旧内容去留来说,真正有意义的是下面三层,而且它们对应的动作完全不同。
只有第一类能支撑处置决策。第二类和第三类都属于待补,区别在于补的代价不同:续跑第二类通常便宜,重建第三类往往要重新走一遍发现流程。
假设你手上有一个中断的扫描任务,留下了任务日志、部分结果文件和一份URL清单。按下面的顺序核对,能较快圈出真实边界。
这一步的实际动作是把A、B、C三个集合分别导出成独立清单。结果直接影响下一步:A可以直接进入保留与退出判断,B只需补跑评分,C要先确认是不是清单生成阶段就断了,再决定重建范围。
同样是中断,原因不同,覆盖判断的可信度也不同。可以按下面的证据区分。
一个可用的判断方法是随机抽取若干条C中的URL,手动确认它们是否真的从未被抓取。如果抽到的多数其实在日志里有痕迹,说明问题出在结果写入而非发现阶段,续跑成本低;如果抽到的确实毫无痕迹,且集中在某类路径下,更可能是发现阶段断裂,需要重建清单。
覆盖范围确认后,处置动作才有着落。以旧内容退出为例,可以这样落地:
这里的关键取舍是:不要为了追求一次完整扫描而阻塞处置。如果A已经覆盖了站点的主要目录,可以先对A执行退出动作,同时把B和C作为补跑任务排期。反之,如果C占比很高且集中在重要目录,先补发现再决策更稳妥。
假设某次扫描在完成约六成批次后中断,结果文件里有记录的是A,日志尾部有一批无结果记录,原始清单与结果文件的差集是C。此时从C中随机取二十条URL,逐条在日志里搜索。若其中十五条能搜到请求痕迹,说明大部分C其实已被抓取,只是结果没落盘,续跑评分即可;若只有两三条有痕迹,说明C确实没进过队列,需要重建发现流程。这个抽样不保证结论精确,但它用很小的成本把“续跑”和“重跑”两个方向区分开,避免直接重跑造成重复劳动。具体抽样数量应按站点规模和可接受误差自行调整。
上面的方法成立的前提是:扫描过程留下了可读的日志或批次标记,且原始URL清单可获取。如果工具只提供汇总数字、不保留逐条记录,那么覆盖边界无法从现有产物还原,只能以重新扫描为准。此外,如果站点在中断期间发生过发布、删除或改版,旧清单与当前状态已经不一致,续跑前应先确认URL是否仍然有效,否则补跑结果会混入大量无效请求。具体工具是否保留批次日志、导出格式如何,需要以你实际使用的版本为准进行核对。