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

使用BeautifulSoup爬取HTML表格出现NoneType无select属性报错如何解决

报错根因说明

你遇到的AttributeError: 'NoneType' object has no attribute 'select'报错,核心原因是执行table.select时,table变量为None,证明上一步的soup.find操作没有匹配到任何符合条件的表格元素。

具体问题点&修复方案
  • 问题1:请求未携带headers参数
    代码中提前定义了请求头,但调用requests.get时没有传入该参数,目标站点有基础反爬校验,无合法UA的请求会返回异常页面,不存在目标表格。修复时只需给get方法添加headers参数即可。
  • 问题2:表格匹配规则错误
    你使用attrs={'style':"border"}做完全匹配,但实际页面中表格的style属性值不会只有border四个字符,完全匹配无法命中元素。可以修改为模糊匹配规则,匹配style属性值中包含border的表格。
  • 问题3:未定义header变量
    最后创建DataFrame时使用的header变量没有提前定义,即使成功获取表格数据也会触发NameError。可以提前爬取表格表头赋值给header,或者根据实际需求自定义表头内容。
修正后参考代码
import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3"
}
# 新增传入headers参数
r = requests.get("https://capitalonebank2.bluematrix.com/sellside/Disclosures.action", headers=headers)
soup = BeautifulSoup(r.content, "lxml")
# 修改为模糊匹配style包含border的表格,同时增加非空判断兜底
table = soup.find('table', attrs={'style': lambda x: x and 'border' in x})

if not table:
    print("未找到符合条件的表格,请检查页面返回内容或匹配规则")
    exit()

all_data = []
# 提前爬取表头赋值给header变量
header = [th.get_text(strip=True) for th in table.select("tr th")]
for row in table.select("tr:has(td)"):
    tds = [td.get_text(strip=True) for td in row.select("td")]
    all_data.append(tds)

df = pd.DataFrame(all_data, columns=header)
print(df)
排查建议

如果修改后仍然找不到表格,可以先打印r.text查看请求返回的页面内容,确认是否被反爬拦截,返回了验证页面或者空白内容,再对应调整请求策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:01