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

Python使用BeautifulSoup时find方法返回None报错是什么原因

问题根因

  • 你在调用tableData函数前,已经通过soup1.find('table', attrs={'summary': 'Standings - Detailed View'})拿到了符合属性要求的table节点,此时传入函数的data参数本身就是你要找的目标table对象
  • 函数内部执行data.find(attrs=attrs)时,find方法的作用是在当前节点的后代子节点中搜索符合条件的元素,不会检查当前节点本身的属性。而table节点的子节点里不存在带summary="Standings - Detailed View"属性的元素,因此返回None,触发后续报错。
  • 你调试时观测到的summary属性是data(也就是目标table本身)的属性,不是其子节点的,和find方法的搜索范围不匹配。

修复方案

方案1:修改函数逻辑,删除多余的find操作

既然传入的data已经是目标table,直接处理即可,不需要再做一次查找:

def tableData(data):
    row = []
    tr = data.find_all('tr')
    header = [ th.get_text(strip=True) for th in data.find_all('th') ]
    if header:
        row.append(header)
    for tr in tr[1:]:
        row.append([ td.get_text(strip=True) for td in tr.find_all('td')])
    return row

# 调用时直接传找到的table即可
print(tableData(table))

方案2:修改调用方式,传入soup对象而非提前查找table

如果你想保留函数内的查找逻辑,调用时直接把整个soup对象传入即可:

# 调用时不传提前找到的table,传soup对象
print(tableData(soup1, {'summary': 'Standings - Detailed View'}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:18:01