You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取网页表格遇AttributeError:NoneType无find_all属性求助

解决网页表格爬取中的AttributeError问题

错误原因

你的代码报错是因为soup.find('table', {"class": "symbol-table svelte-1q7g1fn"})没有匹配到任何表格元素,返回了None,后续调用f.find_all('tr')时,None对象没有find_all方法,因此触发AttributeError。可能的诱因包括:

  • 目标表格是通过JavaScript动态渲染的,静态HTML中不存在
  • 表格的class名称拼写错误
  • 网页结构已发生变更

修复方案

1. 增加表格存在性校验

在操作表格前先判断是否成功获取到目标元素,避免直接调用None的方法。

2. 优化循环逻辑

直接遍历表格行,避免使用索引取值的繁琐写法,同时跳过表头行(对应你代码中range(1, ...)的逻辑)。

3. 强化异常处理

增加单元格数量校验,防止部分行结构异常导致的报错。

修改后的代码:

f = soup.find('table', {"class": "symbol-table svelte-1q7g1fn"}) 
# 先确认是否找到目标表格
if f:
    # 跳过表头,遍历从第二行开始的所有数据行
    for row in f.find_all('tr')[1:]:
        try:
            tds = row.find_all('td')
            # 确保当前行有足够的单元格数量再提取数据
            if len(tds) >= 6:
                dat = tds[0]
                symb = tds[1]
                name = tds[2]
                print(f'{dat.text.strip()} {symb.text.strip()} {name.text.strip()}')
            else:
                print(f"行结构异常,单元格数量不足:{len(tds)},跳过该行")
        except Exception as e:
            print(f"处理行时发生错误:{str(e)}")
else:
    print("未找到目标表格,请检查class名称或网页结构是否变化")

额外提示

如果确认class名称正确但仍找不到表格,大概率是表格由JavaScript动态加载。此时需要使用Selenium、Playwright等工具模拟浏览器加载页面,待页面渲染完成后再提取HTML内容进行解析。

内容的提问来源于stack exchange,提问作者Don Lachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:15:36