构建分析用历史库(tushare+163)
程序员文章站
2022-07-13 17:54:59
...
构建分析用历史库(tushare+163),备份一下。
# -*- coding: utf-8 -*-
"""
Created on Sat May 9 20:40:25 2020
@author: xwga
1功能:构建分析用历史库,所有股票的日k线,包含上市(L)、退市(D)和停盘(P)的股票。
2信息来源:163
3程序架构:
main()
pop_stock('D')
codes=get_codelist()
for(codes):
df = get_daily(code)
insert_sql(code,df,'stock_daily')
4.小问题:
pd.to_sql小缺点,不能重复,重复不好区分
好在构建一次也就不到一个小时,如果是做分析用,过个几天,重新删除后新建一个也可以
有个参数转换,可能会有些小问题,比如T00018,好像没获取到
"""
import tushare as ts
import pandas as pd
from datetime import datetime
from time import sleep
#设置token
pro = ts.pro_api('输入你的token')
from sqlalchemy import create_engine
engine = create_engine('sqlite:///stock163.db')
def insert_sql(code,data,db_name,if_exists='append'):
#使用try...except..continue避免出现错误,运行崩溃
try:
data.to_sql(db_name,engine,index=False,if_exists=if_exists)
print(code,'写入数据库成功')
except:
print('写入数据库error')
pass
def get_163code(code):
if code[0]=='6':
str1='0'+code[0:6]
else:
str1='1'+code[0:6]
return str1
def get_daily(code,start='19900101',end=''):
'''
专门用于个股,自动转换了代码
沪市前面加0,
深市前面加1,
比如0000001,是上证指数,1000001是中国平安
'''
code163=get_163code(code)
url_mod="http://quotes.money.163.com/service/chddata.html?code=%s&start=%s&end=%s"
url=url_mod%(code163,start,end)
df=pd.read_csv(url, encoding = 'gb2312')
return df
def get_codelist(st):
codes = pro.stock_basic(list_status=st).ts_code.values
#print(codes)
return codes
def pop_stock(st):
stock_lists=get_codelist(st)
#print(len(stock_lists))
i=0
for code in stock_lists:
df = get_daily(code)
insert_sql(code,df,'stock_daily')
i=i+1
if i%10==0:
print(i,code)
#sleep(0.1) #暂停秒数,要是ip被限制,下次把这个时间搞大一点
print("ok")
def main():
t_start=datetime.now()
pop_stock('P') #停盘的股票
pop_stock('D') #退市的股票,大概100多个#
#pop_stock('L') #正常上市交易的股票,一般大概3000多个
t_end=datetime.now()
print("耗时:",(t_end-t_start))
if __name__ =='__main__':
main()
#以下测试或者备用
def get_index(code,start='19900101',end=''):
'''
专门用于指数,代码需要自己组合,一般也就上证指数等几个,辛苦一下吧。
沪市前面加0,
深市前面加1,
比如0000001,是上证指数,1000001是中国平安
'''
url_mod="http://quotes.money.163.com/service/chddata.html?code=%s&start=%s&end=%s"
url=url_mod%(code,start,end)
df=pd.read_csv(url, encoding = 'gb2312')
return df
def read_stock():
df=pd.read_sql('stock_daily',engine)
print(df)
return df
def test1():
df=get_daily('000001') # 平安银行
print(df)
def test2():
df=get_index('000001') # 获取上证指数
print(df)
上一篇: 解决Github访问慢问题。
下一篇: 5.8大数据笔记