A股數據分析之收集數據:股票列表和股價

A股數據分析之收集數據:股票列表和股價


數據是進行數據分析的前提,本文主要講述如何使用Python收集中國滬深兩市的基礎股票數據:股票列表和股價。 ##1. 股票列表 衆所周知,對於A股,中國有兩個交易所即上海證券交易所和深圳證券交易所。咱們主要從他們的官方網站上得到全部的A股列表。html

對於上海交易所,咱們從(http://www.sse.com.cn/assortment/stock/list/share/)下載,當打開該頁面時,會看到右上角有一個下載按鈕,以下圖所示: 上交所股票列表 那麼咱們如何經過Python來下載這些數據呢?咱們仍是直接上代碼吧,以下: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,不然會提示以下錯誤:json

null({"jsonCallBack":"null","success":"false","error":"系統繁忙...","errorType":"ExceptionInterceptor"})

上述程序運行結果以下圖:api

SSE股票列表代碼執行結果

返回的股票列表是一個用\t分隔的csv文件,因爲咱們已經經過decode函數把數據解析成字符串了,因此下面使用pandas直接解析該字符串:函數

import pandas as pd
from io import StringIO

TESTDATA = StringIO(result)
df = pd.read_csv(TESTDATA, sep='\t')
print(df)

運行結果以下: Pandas讀取SSE股票列表網站

對於深交所的股票列表,能夠經過相似的方法得到,只是URL和發送的request參數有所不一樣。打開http://www.szse.cn/market/stock/list/index.html, 在該頁面上一樣有一個能夠下載股票列表的按鈕,以下圖所示: SZSE股票列表網頁 下面是下載該列表的python code:url

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讀取該文件:spa

data = pd.read_excel(szse_stock_list_file)
print(data)

以上代碼運行結果以下: Pandas讀取SZSE股票列表excel

##2.股票價格code

在上一部分,咱們得到了滬深兩市的股票列表而且把它們導入到了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中的幾個參數:

  1. code:  股票代碼,這個信息咱們已經在上面部分得到了,但須要注意的是:對0開頭的股票須要在原始code前加1,對於6開頭的須要加0
  2. start:   開始日期
  3. end:    結束日期,和start一塊兒代表咱們想要獲取哪一個時間段的股價信息
  4. 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 = pd.read_csv(stock_price_csv, encoding='gbk')
print(stock_price_data)

運行結果以下: 股價獲取結果

有了股價數據以後,咱們就能夠進行下一步的數據分析,我會在後續文章中陸續說明。

相關文章
相關標籤/搜索