全站扫描被中断后,不能凭“已经跑了多久”或“抓了多少条”判断覆盖范围,而要把中断前留下的输出整理成一份可核对的已覆盖清单,再决定是续跑、重跑还是只补缺口。核心动作是:把扫描日志或导出结果按URL分组,和站点当前可发现URL集合做一次差集,差集之外的部分才算已覆盖。
判断覆盖范围,前提是先有一个参照集合。中断后的扫描结果本身不能当全集,否则会得出“已抓到的就是全部”的循环结论。可用的参照通常有三类:
这三类参照各有盲区:站点地图可能遗漏新页面,内链爬取可能进不去登录后或参数复杂的页面,访问日志只反映被请求过的部分。因此实际操作中建议至少取两类求并集,作为“应覆盖全集”的近似值,并明确记录这个近似值是怎么来的。
假设某站点地图列出1200个URL,内链爬取得到1350个URL,两者并集为1420个。中断时的扫描输出里有900条记录。这时不能直接说“覆盖了900/1420”,因为还要看这900条是否都落在并集内,以及是否有重复、重定向、错误页混在其中。
中断产生的原始输出往往混杂多种状态,直接计数会高估覆盖。需要先做几步清洗:
清洗后得到的清单,才是可以拿去和参照集合做差集的“已覆盖清单”。这一步的结果会直接影响下一步:如果清洗后发现成功记录远少于原始条数,说明中断前的大量输出其实是错误或跳转,续跑的意义就大于补缺口。
把已覆盖清单和应覆盖全集做差集,得到未覆盖URL。但缺口数量本身不足以决定行动,还要看缺口的分布特征:
这里要提醒一点:抓取量归零或某段输出为空,不能单独证明“那部分没被处理过”。它也可能是队列尚未到达、并发被限制、或输出写入被中断。要结合时间戳、日志顺序和错误类型一起判断,而不是只凭数量下结论。
多个角色对“扫了多少”有不同理解时,争论往往停留在各自看到的数字上。更有效的做法是把分歧拆成几个可以逐项核对的项目,例如:
把这些项目写下来逐条确认,分歧通常会从“覆盖了多少”收敛到“按哪个口径算”。口径一旦统一,续跑还是重跑的决定就变得可执行:若参照集合稳定、已覆盖清单干净,只需从缺口补跑;若参照集合本身已过期或已覆盖清单混杂严重,重跑一次反而更省核对成本。
综合来看,中断后判断覆盖范围可以按这个顺序走:先固定应覆盖全集并记录来源,再清洗中断输出得到已覆盖清单,然后做差集并观察缺口分布,最后根据缺口性质选择补跑、续跑或重跑。每一步的结果都会改变下一步的选择,而不是一次性给出结论。具体使用哪款工具、它的当前功能和数据上限,需要以你实际使用的版本和官方说明为准,本文只提供通用的核对方法。