Python 3出现'NoneType' object has no attribute 'text'报错,爬虫代码求助
解决爬取彭博SPX页面时的
'NoneType' object has no attribute 'text'错误 这个错误的核心原因很直白:你的data.find('h1', attrs={'class': 'companyName_99a4824b'})返回了None,说明代码没找到对应的h1标签,自然调用.text就会触发报错。主要有两个常见诱因,我来一步步帮你解决:
1. 先排查:反爬机制拦截了你的请求
直接用urlopen发起请求,彭博的服务器很容易识别出这是爬虫,返回的HTML可能不是正常的页面内容(比如反爬验证页),自然找不到目标元素。解决办法是给请求添加浏览器请求头,模拟正常访问。
2. 再确认:页面结构可能已更新
你用的companyName_99a4824b这个class可能已经被彭博修改了——网站会定期更新前端样式,旧的选择器自然失效。
修复后的完整代码
from urllib.request import urlopen, Request from bs4 import BeautifulSoup # 模拟浏览器的请求头,替换成你常用浏览器的UA也可以 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 用Request包装请求,带上headers req = Request('https://www.bloomberg.com/quote/SPX:IND', headers=headers) page = urlopen(req) data = BeautifulSoup(page, 'html.parser') # 用浏览器F12检查当前页面的元素,这里用当前(2024年)有效的class示例 name_box = data.find('h1', class_='name__99a4824b') # 增加判断,避免找不到元素时崩溃 if name_box: name = name_box.text.strip() print(f"指数名称:{name}") else: print("⚠️ 未找到目标元素,请检查:") print("1. 请求头是否有效") print("2. 页面元素的class或选择器是否已经更新")
额外提示
- 每次爬取前,建议用浏览器打开目标页面,按F12进入开发者工具,定位到指数名称的元素,确认最新的class或选择器
- 如果遇到更严格的反爬(比如需要Cookie、验证码),可能需要用
requests库配合Session,或者考虑使用彭博的官方API(如果有开放权限)
内容的提问来源于stack exchange,提问作者Joshua Parsons
相关产品推荐
相关产品推荐

