同一份解析代码跑了三个月,今天开始 2000 个页面全部入库 0 条,日志里是 IndexError: list index out of range,位置在 tds[3]。日志里能对上时间点,这种反而好排。

页面模板改版后表格从 5 列变成 4 列,取第 4 个 td 就越界。解析代码按固定下标取值,没有做结构校验,任务在第一页就整体中断。这一点先确认清楚,后面就不用反复试。

cols = [td.get_text(strip=True) for td in tr.find_all('td')]
if len(cols) < 4:
    bad += 1
    continue

这次卡住的地方就在「页面改版解析」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:先抓 10 个样本和改版前的结构对比;改成按表头名做列映射;列数不够时跳过该行并计数;把解析成功率接进监控。

结果对不对很好判断,按表头映射后 2000 个页面成功解析 1996 个,4 个缺字段的进了隔离表,任务不再整体失败。

作者 9823189