抓下来的价格字段是  这类实体,渲染出来是 58,去掉标签后得到一串私用区字符,正则 \d 一个都匹配不到。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,页面用自定义 woff 字体把真实数字映射到私用区码位,浏览器按字体渲染成数字,源码里存的是码位。字体文件每次发布都会换一份,映射表写死在代码里下次就失效。
「字体反爬映射」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
from fontTools.ttLib import TTFont
f = TTFont('anti.woff')
print(f.getBestCmap())
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,下载页面引用的 woff 文件;用 fontTools 读出 cmap 表;按字形轮廓和基准数字比对建映射;每次抓取前重新拉一次字体文件。
最后用这个标准收尾,映射表建好后 120 条价格全部还原成两位数字,与浏览器显示逐条一致,错误 0 条。
