使用BeautifulSoup爬取网站指定表格时报NoneType无text属性错误如何解决
错误触发原因
- 核心原因是遍历筛选出的表格时,未做存在性判断就直接调用
<b>标签的text属性:你用筛选条件拿到的所有表格中,并不是每一个表格内部都包含<b>标签,当遍历到没有<b>标签的表格时,t.find('b')会返回None,对空对象调用text属性就会触发该报错。 - 额外存在的隐性问题:你已经初始化了
requests.Session对象并更新了请求头,但实际发起请求时仍使用全局的requests.get,没有复用会话配置,可能增加被网站反爬拦截的概率。 - 匹配逻辑缺陷:即使表格内存在
<b>标签,标签文本可能带有首尾空格,直接用全等匹配也会出现匹配失败的情况。
修复后的可运行代码
import requests from bs4 import BeautifulSoup headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'} link = 'https://www.soccerstats.com/pmatch.asp?league=italy&stats=145-7-5-2022' # 复用会话发起请求 s = requests.Session() s.headers.update(headers) response = s.get(link) soup = BeautifulSoup(response.text, 'html.parser') standings_forms = soup.find_all('table', border='0', cellspacing='0', cellpadding='0', width='100%') for t in standings_forms: # 先判断b标签存在,再取文本去空格后匹配 b_tag = t.find('b') if b_tag and b_tag.text.strip() == 'Form table (last 8)': print(t) # 如果需要提取表格内数据可以在这一步继续解析
内容的提问来源于stack exchange,提问作者luka
相关产品推荐
相关产品推荐

