价格字段里出现 2026-03-01,日期字段里是 ¥58.00,抽查 200 行有 17 行整体错位,错位都从同一列开始。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,表格里部分行合并了单元格,colspan 让这一行的 td 数量比别的行少,按下标取值时后面全部前移一位。解析器默认每行列数一致。
「表格字段错位」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
for td in tr.find_all('td'):
span = int(td.get('colspan', 1))
cells.extend([td.get_text(strip=True)] * span)
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
具体做法是,解析时展开 colspan 和 rowspan 补足列数;每行按列数与表头比对;列数不符的行按表头顺序补齐;入库前做类型校验拦住错位。
最后用这个标准收尾,展开合并列后 200 行抽查错位 0 行,价格字段全部能通过 float 校验,日期字段全部匹配 \d{4}-\d{2}-\d{2}。
