结论先说:中断后不要按“进度条百分比”判断覆盖范围,而应按“已完成抓取的URL清单是否连续、是否有断点”来判断。如果工具提供了可导出的已抓取URL记录,且这些记录按发现顺序或状态分组,通常可以据此界定覆盖范围;如果工具只显示一个总数、不保留中间清单,那么中断后最稳妥的做法是重新扫描,而不是凭进度估算。判断的关键依据是:中断瞬间是否留下了可验证的、逐条可核对的抓取记录。
全站扫描的进度通常由“已处理URL数 ÷ 预估总量”计算。预估总量本身是动态的:扫描过程中新发现的链接会不断加入队列,所以分母会变。中断时显示的百分比,既可能是相对旧分母算出的,也可能在中断前刚被刷新过。更麻烦的是,百分比不告诉你哪些URL被抓过、哪些没有。假设一个两万页的站点,进度停在“60%”,真实情况可能是前一万两千条按顺序抓完了,也可能是并发抓取导致每个目录都抓了一部分、留下大量零散缺口。这两种情况的覆盖范围完全不同,而百分比无法区分。
中断后,通常只有两条路:从已抓取记录中界定范围并补扫缺口,或者直接重新扫描。它们各自成立的条件不一样。
选择时先看一个信号:工具能不能导出中断前的已抓取URL列表。能导出,优先用差集补扫;不能导出,重扫通常比猜测更省事。这个判断不依赖具体品牌,任何工具都可以用同一标准检验,具体导出位置和字段需要在该工具当前版本中核对。
有一种情况会让“有日志就能界定范围”这个结论失效:并发抓取打乱了顺序,且日志只记录完成时间、不记录发现来源。假设扫描器同时开十个线程,中断时日志里有八千条URL,但这些URL分散在整站各处,没有任何字段说明“还有哪些链接是从这些页面里新发现的、但尚未抓取”。此时你手里只有“抓过的”,没有“因这次扫描才被发现、但还没抓的”,差集就会漏掉这一批。结果是你以为补扫了缺口,实际仍有整片新发现区域没进过队列。遇到这种日志结构,重扫更可靠,或者改用支持断点续扫、且能保存待抓队列的工具。
不要直接对全站做决定。先取一个已知边界的子目录,比如/blog/,对它单独跑一次扫描并主动中断,然后检查日志能否还原出这个子目录的已抓和未抓。如果连一个有明确边界的子目录都无法从日志里还原覆盖范围,那么全站中断后就更不可能靠日志判断,此时应选择重扫。如果子目录能还原,再把这个方法套到全站,用站点地图作为全集做差集,只补扫差集部分。这个动作的结果直接决定下一步:能还原就补扫,不能还原就重扫,不要停在中间状态反复估算。