BeautifulSoup找到存在的元素却返回None?
解决AttributeError: 'NoneType' object has no attribute 'prettify'问题
你的问题核心是soup.find(id='wrapper')返回了None,说明BeautifulSoup在请求返回的HTML里找不到目标元素,大概率是网站反爬机制拦截了你的requests请求,返回的不是正常页面内容。
排查步骤
先验证请求返回的内容是否正常,在代码中加入以下代码:
print(page.status_code) print(page.text[:500]) # 打印返回内容的前500个字符
如果状态码不是200,或者返回文本包含反爬提示(比如"Anti-bot"、验证相关内容),就说明请求被拦截了。
解决方案:添加请求头模拟浏览器
网站通常通过User-Agent字段识别爬虫,你需要在请求中加入浏览器的User-Agent,模拟正常访问:
修改后的完整代码:
import requests # 避免用from requests import *,防止命名冲突 from bs4 import BeautifulSoup URL = 'https://plancke.io/hypixel/player/stats/Captbugz' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } page = requests.get(URL, headers=headers) soup = BeautifulSoup(page.content, 'html.parser') results = soup.find(id='wrapper') # 先判断元素是否存在,再调用方法避免异常 if results: print(results.prettify()) else: print("未找到id为wrapper的元素,请检查请求返回内容")
额外建议
- 不要使用
from requests import *这种导入方式,容易引发命名冲突,建议用import requests。 - 调用元素的方法前先判断元素是否为
None,可以避免这类属性错误。 - 如果添加
User-Agent后仍无效,可以尝试补充Accept、Accept-Language等请求头字段,或者用requests.Session()维持会话。
内容的提问来源于stack exchange,提问作者OnMyTerms
相关产品推荐
相关产品推荐

