同一个页面刷新三次,列表项 class 分别是 item_a8Fk2、item_x91Lm、item_p0Qz7,写死 .list-item 的解析规则命中 0 条,任务返回空列表。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
items = soup.select('div[data-id]')
print(len(items))
前端构建时给样式加了哈希后缀,class 名每次发版都会变。按 class 定位的选择器只在当次构建里有效,下一次发版就全废。这一点先确认清楚,后面就不用反复试。
「动态 class 名」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,改成按 DOM 结构定位父级加子节点序号;优先用 data-id 这类稳定属性;再准备一条按文本特征的兜底选择器;把解析成功率接进告警。
改完照着核一遍,换成属性选择器后连续三次发版解析条数都是 60,解析失败告警一次没触发。
