打了分的广播,正文一律没抓到
2200 条有正文的广播只抽到了 789 条。漏掉的 1411 条,每一条都带评分——不是零星漏网,是一整类。
带评分的广播,<blockquote> 和正文 <p> 之间夹着一颗星:
<blockquote>
<span class="rating-stars">★★★★★</span>
<p>7月2号首发玩起了,非常不错!</p>
</blockquote>
而抽取用的正则要求这两者紧挨着。于是凡是打了分的广播,正文一律为空。 实测 2200 条有正文的广播只抽到 789 条,漏掉 1411 条——占 64%。
为什么它能藏这么久
因为 text: null 和「这条广播本来就没写字」长得一模一样,
而后者本来就是大多数——77% 的广播是纯标记动作,本来就没有正文。
所以连比例上都看不出异常:一个正常的空值率,掩护着一整类丢失。
它是从生成出来的页面上肉眼发现的—— 「看过 X」那一行下面本该有一段话。
注意一个字段合法地大部分时候都为空时, 它的空值率就检测不了它自己的 bug。 只能拿它跟别的东西交叉着看(这里是「带评分的广播里有多少条没正文」), 或者去看真实的输出。
广播是这份档案里最不可替代的东西:发布即冻结、可以被静默删除, 也是首次抓取之前那些编辑的唯一证据。丢掉它 64% 的正文是相当严重的一种损失。
而字节一直都在 WARC 里。 改一处重跑,有正文的广播 806 → 2200, 没有重新抓过豆瓣一次。这正是当初把「保存」和「解读」分成两步换来的东西。
那颗星本身,是豆瓣自己都不保留的历史
找到那个 <span> 之后顺手把它存了下来:3401 条广播里 1447 条带评分,
此前全部丢掉。
它和标记页上那个分不是一回事。 标记只留最新的那个——改一次覆盖一次,豆瓣不留历史; 而广播发布即冻结,所以那是「那一天我给了几颗星」。
把同一部作品的几条广播排开,就是一份评分变化史。 实测这份档案里 17 部作品的分变过。其中一部读起来是这样的:
想看 → 在看 ★★★★★ → 看过 ★★★★☆
用户在最后那条广播里解释了为什么降一星。而豆瓣今天只显示 4 星, 中间那段没有任何地方能查到——除了这份档案。
- 数星星,不解析文案:页面上是实体符号,不是数字。
- 没打分写 null,不写 0:0 星和没打分是两件不同的事。
同一批还补上了广播卡片上的作品名(target_title),
包括被删条目上的那个占位符——豆瓣把它显示成「未知作品」,
而占位符不是内容,不能当成作品名存进档案。