使用nsepy获取SBIN2018年股票数据时遇重定向及属性错误
解决nsepy获取SBIN股票数据时的重定向错误与线程属性问题
问题重现
执行以下代码获取印度国家银行(SBIN)2018年股票数据时:
from nsepy import get_history import datetime as dt sbi_df = get_history(symbol="SBIN", start=dt.date(2018, 1, 1), end=dt.date(2018, 12, 31)) print(sbi_df)
出现两类错误:
requests.exceptions.TooManyRedirects: Exceeded 30 redirects:请求陷入重定向循环,核心原因是NSE官方接口更新,旧版nsepy未适配。AttributeError: 'ThreadReturns' object has no attribute 'result':多线程任务因重定向失败,未生成预期的result属性,属于衍生错误。
解决方案
方案1:更新nsepy到最新版本
旧版nsepy的API请求逻辑已不兼容NSE当前的接口规则,执行升级命令:
pip install --upgrade nsepy
升级后重新运行原代码,大概率解决重定向问题。
方案2:手动拆分时间区间,避免自动多线程
nsepy默认会将跨度过长的时间拆分为多段,用多线程并行请求,可能加重重定向问题。手动拆分时间区间,分多次请求后合并:
from nsepy import get_history import datetime as dt import pandas as pd # 拆分2018年为上下半年,分别请求 sbi_df_h1 = get_history(symbol="SBIN", start=dt.date(2018, 1, 1), end=dt.date(2018, 6, 30)) sbi_df_h2 = get_history(symbol="SBIN", start=dt.date(2018, 7, 1), end=dt.date(2018, 12, 31)) # 合并数据 sbi_df = pd.concat([sbi_df_h1, sbi_df_h2]) print(sbi_df)
方案3:替换为维护更活跃的yfinance库
如果nsepy仍无法正常工作,改用yfinance获取NSE股票数据(需先安装yfinance):
pip install yfinance
示例代码:
import yfinance as yf import datetime as dt start_date = dt.date(2018, 1, 1) end_date = dt.date(2018, 12, 31) # NSE股票代码需加.NS后缀 sbi_ticker = yf.Ticker("SBIN.NS") sbi_df = sbi_ticker.history(start=start_date, end=end_date) print(sbi_df)
内容的提问来源于stack exchange,提问作者Sachin Jain
相关产品推荐
相关产品推荐

