Python使用BeautifulSoup爬取页面出现NoneType无text属性报错如何修复
网页爬虫AttributeError报错修复方案
错误根因
你遇到的AttributeError: 'NoneType' object has no attribute 'text'报错,核心原因是 soup.find('span', {'id': 'statsPoolMc'})没有匹配到对应页面元素,返回了空值None,直接对空值调用.text属性就会触发该异常。
匹配不到元素的具体原因是目标站点的内容是JavaScript动态渲染生成的,直接调用session.get()拿到的是未执行JS的初始静态HTML源码,不存在你要查找的id为statsPoolMc的span元素。
修复代码
你使用的requests_html库本身自带JS渲染能力,只需要在获取响应后调用render()方法执行页面JS,等待动态元素加载完成后再解析即可,修改后可运行代码如下:
from bs4 import BeautifulSoup from requests_html import HTMLSession session = HTMLSession() response = session.get('https://pool.rplant.xyz/#') # 执行页面JS渲染,等待动态元素加载完成 response.html.render() # 两种解析方式二选一即可 # 方式1:直接使用requests_html自带的选择器,无需额外引入BeautifulSoup nah = response.html.find('#statsPoolMc', first=True).text print(nah) # 方式2:沿用你原来的BeautifulSoup解析逻辑,传入渲染后的完整HTML源码 # soup = BeautifulSoup(response.html.html, 'html.parser') # nah = soup.find('span', {'id': 'statsPoolMc'}).text # print(nah) session.close()
注意事项
- 第一次调用
render()方法时,工具会自动下载用于JS渲染的Chromium内核,需保持网络通畅等待下载完成后再执行后续逻辑。 - 如果渲染后仍找不到对应元素,可以先打印渲染后的完整HTML源码
print(response.html.html),确认目标元素的id是否符合预期,排查是否有反爬策略拦截了你的请求。 - 代码执行完毕后要主动关闭session,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者Dany Frum
相关产品推荐
相关产品推荐

