Python爬取coinmarketcap数据遇索引越界异常的流程故障排查
爬取CoinMarketCap行情脚本越界报错排查方案
报错核心原因
- 你当前抓到的静态页面DOM里,只有前10行币种是完整渲染的,每行的
<td>单元格数量够你用1、2、3、8的索引取到对应字段。 - 从第11行开始的表格行是网站的懒加载占位骨架,仅带两三个有效
<td>节点,根本没有第8个索引对应的流通供应字段,取数时自然触发list index out of range报错。 - 你写的try-except逻辑根本没失效,只是因为从第11行开始全是这种结构不全的占位行,每一行都会触发同样的越界异常,循环反复打印报错、跳行,看起来像是执行流卡滞,本质是压根没碰到带真实数据的行。
可落地的修复思路
- 砍掉重复的无效DOM查询:别每取一个字段就重新跑一次
row.findAll('td'),一行里重复查好几次,纯纯浪费性能。先把当前行的所有单元格存到临时变量cells,第一时间做长度校验——如果len(cells) < 9直接跳过该行,不要等触发索引越界再走异常兜底,效率高很多。 - 别死磕硬编码数字索引:网站哪天偷偷调整单元格的顺序,你写的固定索引分分钟失效。建议结合每个单元格自带的class属性匹配对应字段,定位稳定性会高很多,后续维护也不用数格子。
- 解决非首屏数据的抓取逻辑问题:直接用
urlopen抓静态HTML,本来就只能拿到前10行的渲染数据,后面的行内容是前端异步接口加载的,静态页面里根本没有对应信息。如果需要拿10名之后的币种数据,要么直接调用对应的公开行情接口,要么用浏览器自动化工具模拟页面滚动,触发懒加载逻辑等全量DOM渲染完再解析,否则就算你写十层异常捕获,也没法从占位骨架里抠出真实数据。 - 优化CSV写入逻辑:手动拼字符串、手动替换字段里的逗号这种写法很容易出问题——万一字段本身带换行、多段逗号,生成的CSV直接就格式错乱了。建议直接用Python内置的
csv模块完成文件写入,不用自己手写分隔符处理逻辑,省很多事。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

