v1.3.2,以及为什么格式版本跳到了 1.4
两组修复:抓取卡死、重试成功了缺口却收不回。 档案格式随之从 1.3 走到 1.4——它只多了一个可选字段。
v1.3.2 已经发布。 两件事都来自同一次真实抓取的反馈,各自已经写过一篇,这里只列结果:
-
抓取卡住不动——
一次抓取停了 8494 秒。真凶是超时只盖住半次往返:浏览器的
fetch()在响应头到达时就返回,而随后读正文那一步没有任何上限。 而它能卡这么久,是因为另外三道保护各自堵住了自救的一段。四处都修了; 同样的卡死现在最多卡 5 分钟,然后被判死、接管、从断点继续。 - 重试成功了,缺口却收不回—— 一张图三次超时记下缺口,点重试、成功了,而档案里那句「抓不下来」原样封了进去。 缺口现在多存一份结构化的 URL,成功捕获时精确抹掉。
面板还多了两句话:帮助页的「进度长时间不动」(5 分钟后自动接管, 不必重装扩展),以及导入按钮旁边那行——系统的文件夹对话框一次只能选一个文件夹, 要一次导入多份,选中它们共同的上一级。
那个 1.4 是什么
它不是扩展的版本号。这个项目有两条独立的版本线,混起来看会很吓人:
| 版本号 | 说的是什么 | 现在是 |
|---|---|---|
| 扩展版本 | 你装的这个软件 | v1.3.2 |
spec_version | 档案文件夹的格式 | bundle/1.4 |
1.4 与 1.3 的全部差别是一个可选字段:一处「这一页抓不下来」的缺口, 现在除了那句给人看的话,还单独存一份它说的那个 URL。
为这一个字段动版本号,是规范自己的规矩: 新增可选字段就是一次小版本。听起来小题大做,但它买下的东西很具体—— 档案是冻住的,一份 2022 年的备份今天还要能读。 「这份档案是按哪一版写的」必须写在文件里,而不是靠读的人去猜。
这个字段还带来一条新的校验:一处缺口说某个 URL 抓不下来, 而同一份档案里就有那个 URL 的成功捕获——校验器现在会报错。 换句话说,这一类错话从今往后能被第三方当场看出来, 不必相信生产者的自述。
新旧怎么搭,一张表说完
结论先说:老档案什么都不用做。不用重抓,不用转换,不用导出再导入。 下面这些是实际验过的——手上那 26 份真实档案正好横跨四个格式版本 (1.0 四份、1.1 八份、1.2 六份、1.3 八份),全套流程跑了一遍。
| 场景 | 支持吗 | 依据 |
|---|---|---|
| 新版扩展导入 1.0–1.3 的老档案 | ✅ 支持 | 导入只核对文件名、字节数与摘要,从不看版本号 |
| 一个目录里混着好几个格式版本,一起解析 | ✅ 支持 | 实测:26 份一起解析,产出 2963 条标记 |
| 拿老档案当基准,接着做增量抓取 | ✅ 支持 | 链的判据是档案编号与水位线,与格式版本无关 |
| 老档案建站 / 导出到 NeoDB | ✅ 支持 | 样张站就是这么生成的 |
| 抓到一半(1.3.1),升级之后接着抓完 | ✅ 支持 | 断点续抓不按版本校验;收尾时按新版本如实写下 |
| 旧版本的扩展 / 解析器读 1.4 的新档案 | ✅ 支持 | 规范要求读者容忍不认识的字段,两边都有专门的用例在跑 |
| 新校验器校验老档案 | ✅ 支持 | 实测 26 份里 22 份通过;4 份报的是七月那个已知的老毛病,与版本无关 |
| 旧校验器(1.3 那一版)校验 1.4 的新档案 | ⬜ 会被拒 | 唯一的例外,见下 |
最后一行是整张表里唯一的「不支持」,而它是故意的:
档案格式的 schema 不接受它不认识的字段。一个 1.3 时代的校验器看到
url 会说「这不合规」——它说得对,按它知道的那一版确实不合规。
这条规矩存在的理由是宁可响亮地拒绝,也不要默默地少读一个字段;
规范里另外两次小版本递增(unknown 判定、导入档案的成色取值)也都是这样。
解决办法是把规范仓库更新到最新——那是校验器这一个工具的事, 跟你的档案、跟扩展、跟解析器都没有关系。
一句话版本:装上 v1.3.2,老档案照旧用,新抓的档案里多了一个字段。
只有一件事会变——如果你手上留着一份旧的 validate.py 用来自己核对,
更新它。