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

使用Python获取Yahoo Finance数据报错,请求技术支持

解决pandas_datareader获取Yahoo Finance股票数据失败的问题

问题重现

尝试用以下代码获取TSLA股票数据时触发RemoteDataError,返回Yahoo的404错误页面:

import numpy as np
import pandas as pd
from pandas_datareader import data
TSLA = data.DataReader('TSLA', 'yahoo', start='2020-01-01')
print("TSLA:",TSLA)

报错核心信息:

pandas_datareader._utils.RemoteDataError: Unable to read URL: https://finance.yahoo.com/quote/TSLA/history?...
Response Text: <html>...Will be right back...</html>

原因分析

Yahoo Finance更新了反爬机制,旧版pandas_datareader的Yahoo数据源未适配新的验证规则,导致请求被拦截并返回404。

解决方案

方案1:使用yfinance库(推荐)

yfinance是专门为Yahoo Finance数据开发的第三方库,维护活跃,兼容性更好:

  1. 先安装依赖:
pip install yfinance
  1. 替换代码:
import numpy as np
import pandas as pd
import yfinance as yf

# 获取TSLA股票数据
TSLA = yf.download('TSLA', start='2020-01-01')
print("TSLA:", TSLA)

方案2:为pandas_datareader添加请求头

通过自定义requests.Session添加浏览器UA,模拟正常请求:

import numpy as np
import pandas as pd
from pandas_datareader import data
import requests

# 创建带浏览器请求头的会话
session = requests.Session()
session.headers.update({
    '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'
})

# 传入会话获取数据
TSLA = data.DataReader('TSLA', 'yahoo', start='2020-01-01', session=session)
print("TSLA:", TSLA)

注意事项

  • pandas_datareader官方已标记Yahoo数据源为不稳定,后续可能随时失效,优先推荐使用yfinance。
  • 若使用方案2,需定期更新请求头中的UA字符串,避免被反爬机制拦截。

内容的提问来源于stack exchange,提问作者David T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:55:36