系统:ubuntu18.04
python:3.8
使用Python SDK方式调用tushare接口。
官方文档都写的非常详细,这里只记录下使用中遇到的问题与解决方式。
首先已经安装好conda或者python环境。官方文档也有其他安装方式,简单来说就以下这两种。
$ conda install tushare
or
$ pip install tushare
tushare有一套历史接口,目前已经停止维护。所以在使用old接口时,会报错
本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
...
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>
所以这里直接略过老接口,使用新接口
调用pro接口,需要一些基础积分,比如stock_basic就需要120积分。注册+完善个人资料,就可以获取到100+20积分,就可以调用一些基本的接口。注册完成后,可记录下自己的token,在“用户中心”中点击“接口TOKEN”可以看到,在调用接口时,需要使用。
因为python3没有MySQLdb,所以这里需要用pymysql。
create_engine中的user,passwd,host,dbname,需要根据实际情况做调整。
以stock_basic接口返回数据作为例子,降返回结果存入stock_basic表。
import pandas as pd
import tushare as ts
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
engine_ts = create_engine('mysql://user:passwd@host/dbname?charset=utf8')
def write_data(df):
res = df.to_sql('stock_basic', engine_ts, index=False, if_exists='append', chunksize=5000)
print(res)
def get_data():
pro = ts.pro_api('your_token')
df = pro.stock_basic()
return df
if __name__ == '__main__':
df = get_data()
write_data(df)
print(tc)
有时接口不能太频繁调用,可能会失败,所以需要重试机制。
以daily接口使用举例:
# 获取日线行情,保持数据稳定性,需要重试机制
def get_daily(trade_date):
try_count = 10
for i in range(try_count):
try:
df = pro.daily(trade_date=trade_date)
except:
print('get_daily try again ' + str(i))
time.sleep(2)
else:
return df
print(str(try_count) + ' try failed!')