A股資料分析之收集資料:股票串列和股價
資料是進行資料分析的前提,本文主要講述如何使用Python收集中國滬深兩市的基礎股票資料:股票串列和股價,
1. 股票串列
眾所周知,對于A股,中國有兩個交易所即上海證券交易所和深圳證券交易所,我們主要從他們的官方網站上獲得所有的A股串列,
對于上海交易所,我們從(http://www.sse.com.cn/assortment/stock/list/share/)下載,當打開該頁面時,會看到右上角有一個下載按鈕,如下圖所示:
那么我們如何通過Python來下載這些資料呢?我們還是直接上代碼吧,如下:
from urllib import request
#Download A-Stock stock list
sse_stock_list_url = 'http://query.sse.com.cn/security/stock/downloadStockListFile.do?csrcCode=&stockCode=&areaName=&stockType=1'
request_headers = {'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/56.0.2924.87 Safari/537.36',
'Referer': 'http://www.sse.com.cn/assortment/stock/list/share/'
}
req = request.Request(sse_stock_list_url, headers=request_headers)
resp = request.urlopen(req)
result = resp.read().decode('gb2312')#please use gb2312 to decode otherwise you will not get correct data
這里需要注意的是必須提供headers,否則會提示如下錯誤:
null({"jsonCallBack":"null","success":"false","error":"系統繁忙...","errorType":"ExceptionInterceptor"})
上述程式運行結果如下圖:

回傳的股票串列是一個用\t分隔的csv檔案,由于我們已經通過decode函式把資料決議成字串了,所以下面使用pandas直接決議該字串:
import pandas as pd
from io import StringIO
TESTDATA = https://www.cnblogs.com/dereklovecc/p/StringIO(result)
df = pd.read_csv(TESTDATA, sep='\t')
print(df)
運行結果如下:

對于深交所的股票串列,可以通過類似的方法獲得,只是URL和發送的request引數有所不同,打開http://www.szse.cn/market/stock/list/index.html, 在該頁面上同樣有一個可以下載股票串列的按鈕,如下圖所示:
下面是下載該串列的python code:
szse_stock_list_url = 'http://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=1110&TABKEY=tab1'
szse_stock_list_file = 'szse_stock_list.xlsx'
request.urlretrieve(szse_stock_list_url, szse_stock_list_file)
以上代碼會把股票串列下載到當前目錄下的一個名為szse_stock_list.xlsx的檔案中,格式為excel,下面我們使用pandas讀取該檔案:
data = https://www.cnblogs.com/dereklovecc/p/pd.read_excel(szse_stock_list_file)
print(data)
以上代碼運行結果如下:

2.股票價格
在上一部分,我們獲得了滬深兩市的股票串列并且把它們匯入到了pandas中,下面就來看看如何獲得這些股票的每日股價資訊,這里我們使用了網易財經,下面是一個例子:
http://quotes.money.163.com/service/chddata.html?code=0600138&start=20040101&end=20190710&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP
在這里,我們需要解釋一下URL中的幾個引數:
- code: ?股票代碼,這個資訊我們已經在上面部分獲得了,但需要注意的是:對0開頭的股票需要在原始code前加1,對于6開頭的需要加0
- start: ??開始日期
- end: ?? 結束日期,和start一起表明我們想要獲取哪個時間段的股價資訊
- fields:??列出你想要獲得哪些方面的資料如開盤價(TOPEN)等
下面是獲得股價的代碼以及其運行結果,由于上一部分獲得的股票太多,這里只用600138作為例子:
stock_code='0600138'#注意:在原始code前加了個0
start_date='20040101'
end_date='20190710'
stock_price_csv = '600138.csv'
url = f'http://quotes.money.163.com/service/chddata.html?code={stock_code}&' \
f'start={start_date}&end={end_date}&' \
f'fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
request.urlretrieve(url,stock_price_csv)
匯入到pandas中的代碼如下
stock_price_data = https://www.cnblogs.com/dereklovecc/p/pd.read_csv(stock_price_csv, encoding='gbk')
print(stock_price_data)
運行結果如下:
有了股價資料之后,我們就可以進行下一步的資料分析,我會在后續文章中陸續說明,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187343.html
標籤:Python



