由于yahoo已经中止了大陆地区的服务,所以原来使用pandas_datareader模块,以及升级版本的yfinance模块,包括许多网络上介绍的方法,读取yahoo股票数据都是失败的,可能是yahoo接口变化引起的。经过两天的在Google查找终于找到解决方案,需要以下几步准备:
1.解决上网的问题,这是必须;
2.引入import io, requests , pandas as pd包,由于最新URLLib3最新库访问Https会报错,必须将URLLib3的版本从新版本降低到1.25.11 以下(pip install urllib3==1.25.7 ),这时使用 requests 的get方法读取Yahoo数据。
3.通过get函数访问https://query1.finance.yahoo.com/v7/finance/download/得到一个excel文件,然后使用pandas.read_csv函数生成dataframe
def fetch(ticker, start="2022-01-01", end="2022-02-02",intervalstr="1d"):
headers = {
'User-Agent':
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2)
AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2
Safari/601.3.9'
}
url = "https://query1.finance.yahoo.com/v7/finance/download/" + str(ticker)
x = int(datetime.strptime(start, '%Y-%m-%d').timestamp())
y = int(datetime.strptime(end, '%Y-%m-%d').timestamp())
url += "?period1=" + str(x) + "&period2=" + str(y) +
"&interval="+intervalstr+"&events=history&includeAdjustedClose=true"
print(url)
r = requests.get(url, headers=headers,verify=False)
pd1 = pd.read_csv(io.StringIO(r.text), index_col=0, parse_dates=True)
return pd1
4.在yahoo我们免费只能取得股票的每天行情数据,其它一些基本数据,更多的数据被yahoo移到finance plus 那么更多的股票数据必须花钱才能才能拿到。国内数据有tushare,baostock 包可以使用。



