使用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数据开发的第三方库,维护活跃,兼容性更好:
- 先安装依赖:
pip install yfinance
- 替换代码:
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
相关产品推荐
相关产品推荐

