结论先给:中断后不要用“扫描到第几条”或剩余时间倒推覆盖范围,而要把已落地的结果按入口分组,逐组核对“该组是否出现过至少一条成功记录”。只有当你确认每个入口组都至少有一条成功记录,且中断点之后没有新增入口,才能把这次扫描近似看作全站覆盖;否则它只是一次部分覆盖。这个判断有一个会失效的反例:如果站点在扫描期间新增了栏目、子域或大量新链接,即便所有旧入口组都出现过成功记录,也不能认定覆盖完整。
全站扫描的进度通常按待处理队列计算,而队列的生成方式决定了百分比的含义。常见情况是:工具先抓首页,再从首页链接里派生下一批任务。中断时显示的百分比,只说明“已处理任务占当时队列的比例”,并不说明队列本身是否已经穷尽全站。
更麻烦的是,队列是动态增长的。你看到 60% 时,可能后面还会因为发现新目录而追加任务,真实分母比显示的大。因此百分比偏高但覆盖偏低是正常现象,不是工具出错。
能作为证据的,是那些不随队列变化的事实:哪些入口被访问过、每个入口下是否出现过成功响应、失败是超时还是被拒。这些记录在中断后依然可查,而百分比会随会话结束失去意义。
把已抓到的结果按“入口来源”归类,比数总条数更有判断力。可以这样分组:
对每一组,只问一个问题:这一组里有没有至少一条成功记录?如果有,说明该入口在中断前已被打开过,这一支的覆盖是“已进入”状态;如果整组为空,说明中断发生在打开该入口之前,这一支完全没覆盖。
这个方法的价值在于,它把“扫了多少”换成“打开了哪些门”。门没打开,里面有多少房间都无从谈起。
同样是中断,原因不同,已覆盖范围的可信度也不同。
如果无法确定属于哪一种,保守做法是只采信中断前明显稳定运行阶段的结果,把末尾一段整体丢弃。
假设某次扫描在约四成进度时中断。事后检查发现:首页和两个一级栏目都有成功记录,站点地图入口没有任何记录,分页列表只有第一条成功。据此可以判断:主体内容已进入,但站点地图这一支完全未覆盖,分页深层大概率也未覆盖。此时把这次结果当作“全站已覆盖”会漏掉大量只出现在站点地图或深分页里的链接。正确做法是补扫这两支,而不是从头重扫全部。
反过来,如果四个入口组都至少有一条成功记录,且中断后站点结构没有变化,那么这次结果可以近似当作全站覆盖,后续只需做增量核对。注意这里的前提是“结构没有变化”,一旦期间新增栏目,结论立即失效。
判断覆盖范围的目的,是决定补扫还是重扫。如果未覆盖的入口组数量少且边界清晰,优先补扫这些入口,成本远低于全量重来。如果未覆盖的入口组超过一半,或者连哪些入口被打开过都无法确认,那就直接重扫,因为补扫的核对成本已经接近重扫。
补扫前做一个动作:把本次已成功的结果单独留存,不要与补扫结果混在同一份文件里。这样后续出现重复或冲突时,你能分清哪些来自第一次、哪些来自补扫,从而判断是站点变化还是抓取差异。这个留存动作直接影响下一次核对的可信度,值得在补扫开始前完成。