本文介紹使用python從Tushare下載數(shù)據(jù)并存儲(chǔ)到csv文件和mssql數(shù)據(jù)庫(kù)中。
Tushare簡(jiǎn)介
Tushare金融大數(shù)據(jù)開(kāi)放社區(qū),免費(fèi)提供各類(lèi)金融數(shù)據(jù)和區(qū)塊鏈數(shù)據(jù),助力智能投資與創(chuàng)新型投資。網(wǎng)址:https://tushare.pro/register?reg=127755
注:推廣一下分享鏈接,幫我攢點(diǎn)積分,你好我也好 ^_^ 。
python環(huán)境安裝
強(qiáng)烈建議使用Anaconda,Anaconda的安裝見(jiàn):https://tushare.pro/document/1?doc_id=29
python的IDE我使用vscode,在Anaconda主界面中直接打開(kāi)vscode,它會(huì)幫你設(shè)置好環(huán)境,簡(jiǎn)單方便。
tushare庫(kù)安裝
打開(kāi)vscode的[查看]->[終端],輸入 pip install tushare 即可安裝tushare。輸入 pip install tushare --upgrade 即可更新tushare。缺少或者更新其他python庫(kù),參照這個(gè)方法即可。
環(huán)境安裝好后,就可以開(kāi)工了。直接上代碼,這份代碼從Tushare下載股票列表數(shù)據(jù),保存為csv文件,同時(shí)保存在mssql數(shù)據(jù)庫(kù)中。
注意:在to_sql中的schema參數(shù)為數(shù)據(jù)庫(kù)名,需要帶上該數(shù)據(jù)庫(kù)的角色,我使用sa登錄,數(shù)據(jù)庫(kù)隸屬于dbo。使用to_sql不需要?jiǎng)?chuàng)建表,pandas會(huì)自動(dòng)幫你創(chuàng)建好,也不需要自己寫(xiě)插入數(shù)據(jù)的代碼,還是很方便的。如果你在表中增加了主鍵或者唯一索引,有重復(fù)數(shù)據(jù)時(shí)批量入庫(kù)會(huì)失敗。tushare本身是有少量重復(fù)數(shù)據(jù)的。采用逐行入庫(kù)的方式速度會(huì)比較慢,需要根據(jù)業(yè)務(wù)自己衡量選擇。
#!/usr/bin/python3
# coding:utf-8
# -*- coding: utf-8 -*-
import time
import datetime
import random
import tushare
import pandas
import pymssql
import sqlalchemy
#需修改的參數(shù)
stock_list_file = 'stock_list.csv' #股票列表文件csv
#tushare token
tushare_token='.....5f7760d2e3b297299c3b0d2b47b7886a88dbc4df5ed5......'
#數(shù)據(jù)庫(kù)參數(shù)
db_host = '127.0.0.1'
db_user = 'sa'
db_password = 'pwd'
db_db = 'quantum'
db_charset = 'utf8'
db_url = 'mssql+pymssql://sa:pwd@127.0.0.1:1433/quantum'
#股票列表
def get_stock_basic() :
print('開(kāi)始下載股票列表數(shù)據(jù)')
#獲取tushare
pro = tushare.pro_api()
#下載
data = pro.stock_basic(fields='ts_code,symbol,name,fullname,list_status,list_date,delist_date')
#保存到csv文件
data.to_csv(stock_list_file)
#入庫(kù)
engine = sqlalchemy.create_engine(db_url)
try:
#先一次性入庫(kù),異常后逐條入庫(kù)
pandas.io.sql.to_sql(data, 'stock_basic', engine, schema='quantum.dbo', if_exists='append', index=False)
except :
#逐行入庫(kù)
print('批量入庫(kù)異常,開(kāi)始逐條入庫(kù).')
for indexs in data.index :
line = data.iloc[indexs:indexs+1, :]
try:
pandas.io.sql.to_sql(line, 'stock_basic', engine, schema='quantum.dbo', if_exists='append', index=False, chunksize=1)
except:
print('股票列表數(shù)據(jù)入庫(kù)異常:')
print(line)
finally:
pass
finally:
pass
print('完成下載股票列表數(shù)據(jù)')
return 1
#全量下載所有股票列表數(shù)據(jù)
if __name__ == '__main__':
print('開(kāi)始...')
#初始化tushare
tushare.set_token(tushare_token)
print('獲取股票列表')
get_stock_basic()
print('結(jié)束')
聯(lián)系客服