数据是进行数据分析的前提,本文主要讲述如何使用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
返回的股票列表是一个用\t分隔的csv文件,因为咱们已经经过decode函数把数据解析成字符串了,因此下面使用pandas直接解析该字符串:函数
import pandas as pd from io import StringIO TESTDATA = StringIO(result) df = pd.read_csv(TESTDATA, sep='\t') print(df)
运行结果以下: 网站
对于深交所的股票列表,能够经过相似的方法得到,只是URL和发送的request参数有所不一样。打开http://www.szse.cn/market/stock/list/index.html, 在该页面上一样有一个能够下载股票列表的按钮,以下图所示:
下面是下载该列表的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)
以上代码运行结果以下: excel
##2.股票价格code
在上一部分,咱们得到了沪深两市的股票列表而且把它们导入到了pandas中,下面就来看看如何得到这些股票的每日股价信息。这里咱们使用了网易财经,下面是一个例子:
在这里,咱们须要解释一下URL中的几个参数:
下面是得到股价的代码以及其运行结果,因为上一部分得到的股票太多,这里只用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)
运行结果以下:
有了股价数据以后,咱们就能够进行下一步的数据分析,我会在后续文章中陆续说明。