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

使用pandas_datareader从Yahoo Finance爬取数据遇TypeError问题求解

解决pandas_datareader爬取Yahoo Finance数据时的TypeError问题

这个错误的核心原因是pandas_datareader官方的Yahoo数据源已失效——Yahoo Finance多年前更新了API结构,旧版pandas_datareader无法正确解析其返回的响应(返回内容是字符串而非预期的JSON对象,因此无法通过字典索引访问)。

以下是两种可行的解决方案:

方案1:使用yfinance替代(推荐)

yfinance是专门适配Yahoo Finance的第三方库,维护活跃,能稳定获取数据,且无需额外API密钥。

  1. 安装yfinance:
pip install yfinance
  1. 修改原有代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf  # 替换pandas_datareader
from datetime import datetime

start = datetime(2013, 1, 1)
end = datetime(2022, 12, 31)
indicator_id = 'TCS.NS'

# 使用yfinance的download方法获取数据
df = yf.download(indicator_id, start=start, end=end)
print(df.head())

该方案返回的数据格式与原pandas_datareader完全一致,迁移成本极低,且兼容你的Python 3.8.0版本。

方案2:改用pandas_datareader支持的其他数据源(可选)

如果坚持使用pandas_datareader,可以切换到Alpha Vantage等仍在维护的数据源(需注册获取免费API密钥):

  1. 安装依赖:
pip install pandas-datareader alpha-vantage
  1. 修改代码(替换为你的API密钥):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader as data
from datetime import datetime

start = datetime(2013, 1, 1)
end = datetime(2022, 12, 31)
indicator_id = 'TCS.NS'
api_key = "你的Alpha Vantage API密钥"

df = data.DataReader(indicator_id, 'av-daily', start=start, end=end, api_key=api_key)
print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:06:28