代碼示例如下:
創建於2007年7月23日星期四09:17:27 2015
@作者:jet
"""
DAY_PRICE_COLS = ['date ',' open ',' high ',' close ',' low ',' volume ',
' chg ',' %chg ',' ma5 ',' ma10 ',' ma20 ',
vma5 ',' vma10 ',' vma20 ','營業額']
DAY _ PRICE _ URL = ' % SAPI . finance . % s/% s/?代碼= % s & amp' type=last '
INDEX_KEY = ['SH ',' SZ ',' HS300 ',' SZ50 ',' GEB ',' SMEB']
INDEX _ LIST = { ' SH ':' SH 000001 ',' SZ': 'sz399001 ',' HS300': 'sz399300 ',
' SZ50': 'sh000016 ',' GEB': 'sz399006 ',' SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date ',' open ',' high ',' close ',' low ',' volume ',
' chg ',' %chg ',' ma5 ',' ma10 ',' ma20 ',
vma5 ',' vma10 ',' vma20']
K_TYPE_KEY = ['D ',' W ',' M']
K_TYPE_MIN_KEY = ['5 ',' 15 ',' 30 ',' 60']
K_TYPE = {'D': 'akdaily ',' W': 'akweekly ',' M': 'akmonthly'}
MIN _ PRICE _ URL = ' % SAPI . finance . % s/AK MIN?scode = % s & amp類型=%s
PAGE_TYPE = { ' ',' ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網絡狀態,或者API端口URL不匹配!'
獲取_歷史_數據. py
# -*-編碼:utf-8 -*-
"""
創建於2007年7月23日星期四09:15:40 2015
@作者:jet
"""
將常數作為聯系類型導入
進口熊貓作為pd
導入json
從urllib2導入urlopen,請求
def get_hist_data(code = None,start = None,end = None,ktype = 'D '):
"""
功能:
獲取個股歷史交易數據
-
輸入:
-
代碼:字符串
股票代碼,例如:601989。
開始:字符串
開始日期格式:當YYYY-MM-DD為空時,取API提供的最早日期數據。
結束:字符串
結束日期格式:當YYYY-MM-DD為空時,取最近壹個交易日的數據。
Ktype:string(默認=D,函數自動統壹為大寫)
數據類型D=日k線,W=周k線,M=月k線,5=5分鐘,15=15分鐘。
30=30分鐘,60=60分鐘
輸出:
-
數據幀
日期日期
開盤價
最高價
收盤價格
最低價格
Chg波動
P_chg漲跌
Ma5五天平均價格
Ma10 10日平均價格
Ma20 20天平均價格
VMA5的5天平均值
Vma10日平均
Vma20 20日平均
周轉率(該指數沒有這壹項)
"""
code = code _ to _ API code(code . upper())
ktype = ktype.upper()
url = ' '
url = get_url(ktype,code)
打印(url)
js = json.loads(ping_API(url))
cols = []
if len(js[' record '][0])= = 14:
cols = ct。指數_日_價格_列
否則:
cols = ct。日價格欄
df = pd。DataFrame(js['record'],columns=cols)
如果ct中的ktype。K_TYPE_KEY:
df = df . apply map(lambda x:x . replace(u ',',u ' '))
對於列中的列[1:]:
df[col]=df[col]。astype(浮點型)
如果開始不是無:
df = df[df . date & gt;=開始]
如果end不是None:
df = df[df . date & lt;=結束]
df = df.set_index('date ')
返回df
def code_to_APIcode(代碼):
"""
功能:
驗證輸入的股票代碼是否正確,如果正確,返回API使用的股票代碼。
"""
打印(代碼)
ct中的if代碼。INDEX_KEY:
返回ct。INDEX _ LIST[代碼]
否則:
if len(代碼)!= 6:
引發IOError('代碼輸入錯誤!')
否則:
如果代碼[:1]在['5 ',' 6'] else 'sz%s'%code中,則返回' sh%s'%code
def get_url(ktype,code):
"""
功能:
驗證輸入的k線類型是否正確,如果正確則返回url。
"""
如果ct中的ktype。K_TYPE_KEY:
url = ct。日價格網址%。PAGE_TYPE['http'],ct。PAGE_DOMAIN['ifeng'],
ct。K_TYPE[ktype],代碼)
返回url
聯系類型中的elif ktype。K_TYPE_MIN_KEY:
url = ct。最低價格URL %。PAGE_TYPE['http'],ct。PAGE_DOMAIN['ifeng'],
代碼,ktype)
返回url
否則:
引發IOError('ktype輸入錯誤!')
定義ping_API(url):
"""
功能:
向API發送數據請求,如果鏈接正常則返回數據。
"""
text = ' '
嘗試:
req =請求(url)
text = urlopen(req,timeout=10)。閱讀()
if len(text)& lt;15:
引發IOError('無數據!')
例外情況為e:
打印(e)
否則:
返回文本
#測試門戶
print(get _ hist _ data(' 601989 ',' 2015-07-11 ',' 2015-07-22 '))