Python读取国外股票数据方法

由于yahoo已经中止了大陆地区的服务,所以原来使用pandas_datareader模块,以及升级版本的yfinance模块,包括许多网络上介绍的方法,读取股票行情数据都是失败的,可能是雅虎接口变化引起的。经过两天的在谷歌查找终于找到解决方案,需要以下几步准备:

1.解决上网的问题,这是必须;

2.引入import io, requests , pandas as pd包,由于最新URLLib3最新库访问Https会报错,必须将URLLib3的版本从新版本降低到1.25.11 以下(pip install urllib3==1.25.7 ),这时使用 requests 的get方法读取股票数据。

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
#使用AAPL测试
now =datetime.strptime('2022-05-30', '%Y-%m-%d')
print(int(now.timestamp()) )
startv = "2022-01-03"
endv =str( datetime.now().strftime("%Y-%m-%d"))
print(endv)
data = fetch("AAPL",start=startv,end=endv,intervalstr="1d")
print(data)

4.在雅虎我们免费只能取得股票的每天行情数据,其它一些基本数据,更多的数据被其移到finance plus 那么更多的股票数据必须花钱才能才能拿到。国内数据有tushare,baostock 包可以使用。

Python读取国外股票数据方法_第1张图片

 

你可能感兴趣的:(python,大数据)