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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:49