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

使用utf-8解码Yahoo财经URL时遇UnicodeDecodeError,求解决方法

解决Python中Yahoo Finance数据解码的UnicodeDecodeError问题

先修正代码中的语法错误

你代码里有一行单独的https://finance.yahoo.com/quote/AAPL,这不是合法的Python语句,会直接导致代码运行失败,必须删除这一行。

错误核心原因

出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b的本质是:Yahoo Finance返回的响应内容是gzip压缩格式的二进制数据,你直接用utf-8解码压缩后的原始字节,自然会失败(0x8b是gzip压缩数据的标志性起始字节)。


方案一:用urllib手动处理gzip压缩

导入gzip模块,先判断响应是否为gzip压缩,解压后再解码:

import re
import urllib.request
import gzip

url = "https://finance.yahoo.com/quote/"
stock = input("Enter your stock: ")
url = url + stock
print(url)

response = urllib.request.urlopen(url)
# 检查响应的压缩编码
encoding = response.info().get('Content-Encoding')
if encoding == 'gzip':
    # 解压gzip格式数据
    data = gzip.decompress(response.read())
else:
    data = response.read()

# 正常解码为utf-8文本
data1 = data.decode("utf-8")
# 打印前500个字符验证结果
print(data1[:500])

方案二:用requests库(推荐新手,更简洁)

requests库会自动识别并处理gzip压缩,无需手动操作,代码可读性更高:

  1. 先安装requests:在命令行执行 pip install requests
  2. 修改后的代码:
import re
import requests

url = "https://finance.yahoo.com/quote/"
stock = input("Enter your stock: ")
url = url + stock
print(url)

# requests自动完成压缩处理与解码
response = requests.get(url)
data1 = response.text
# 打印前500个字符验证结果
print(data1[:500])

补充说明

别人的代码能运行可能是因为当时Yahoo Finance未启用gzip压缩,或者对方的代码中已经包含了压缩处理逻辑但你没注意到。

内容的提问来源于stack exchange,提问作者luca dahlmann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:48