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
相关产品推荐
相关产品推荐

