• A股数据分析之收集数据:股票列表和股价


    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"})
    

    上述程序运行结果如下图:

    SSE股票列表代码执行结果

    返回的股票列表是一个用 分隔的csv文件,由于我们已经通过decode函数把数据解析成字符串了,所以下面使用pandas直接解析该字符串:

    import pandas as pd
    from io import StringIO
    
    TESTDATA = StringIO(result)
    df = pd.read_csv(TESTDATA, sep='	')
    print(df)
    

    运行结果如下:
    Pandas读取SSE股票列表

    对于深交所的股票列表,可以通过类似的方法获得,只是URL和发送的request参数有所不同。打开http://www.szse.cn/market/stock/list/index.html, 在该页面上同样有一个可以下载股票列表的按钮,如下图所示:
    SZSE股票列表网页
    下面是下载该列表的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 = pd.read_excel(szse_stock_list_file)
    print(data)
    

    以上代码运行结果如下:
    Pandas读取SZSE股票列表

    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中的几个参数:

    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)
    

    运行结果如下:
    股价获取结果

    有了股价数据之后,我们就可以进行下一步的数据分析,我会在后续文章中陆续说明。

  • 相关阅读:
    linux系统中如何进入退出vim编辑器,方法及区别
    [转]JAVA的动态代理机制及Spring的实现方式
    mybaties 缓存
    全面分析 Spring 的编程式事务管理及声明式事务管理
    面试(4)-spring-Spring面试题和答案
    vector的多套遍历方案
    【QT】QT下载与安装
    【QT】无需写connect代码关联信号和槽函数
    【QT】第一个QT程序(点击按钮,显示特定文本)
    【QT】error: 'SIGNAL' was not declared in this scope
  • 原文地址:https://www.cnblogs.com/dereklovecc/p/12388521.html
Copyright © 2020-2023  润新知