python 股票历史数据(python获取股票历史数据)

因为最近需要用到股市的各种指数数据,刚开始想的是从同花顺等交易软件直接导出,结果发现要用滚轮滚到最开始的日期,这过于繁琐了,我对于这种重复性的劳动一向不耐烦,而且这种方法在以后每日更新的时候也很不方便。所以我把视线转向了网上的各种api。网上比较普遍的主要有两种,一种是新浪的api,一种是雅虎的api。新浪的api很方便,速度也很快,不过就网上的资料而言,似乎只能提取当天的数据。雅虎的api功能更齐

大家好,又见面了,我是你们的朋友全栈君。

因为最近需要用到股市的各种指数数据,刚开始想的是从同花顺等交易软件直接导出,结果发现要用滚轮滚到最开始的日期,这过于繁琐了,我对于这种重复性的劳动一向不耐烦,而且这种方法在以后每日更新的时候也很不方便。所以我把视线转向了网上的各种api。网上比较普遍的主要有两种,一种是新浪的api,一种是雅虎的api。新浪的api很方便,速度也很快,不过就网上的资料而言,似乎只能提取当天的数据。雅虎的api功能更齐全,但是连接速度比较慢,有时候一个连接请求都要10多秒甚至20秒(原谅我的渣网速-,-)这对于需要大量股票数据的我来说显然不可接受。后来发现从网易财经可以下载股票和指数的历史数据。通过在chrome的调试工具中观察请求信息,发现网址为
http://quotes.money.163.com/service/chddata.html?code=0000001&start=19901219&end=20150911&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER
这里0000001指的是上证指数。注意这串数字要分0和000001两部分看。0代表sh,1代表sz。所以0000001其实是sh000001的意思。同理,0 000300也就是sh000300 沪深300的代码。后面的start和end没什么问题。fields选项中,TCLOSE,HIGH,LOW,TOPEN分别表示当日的收盘,最高,最低,开盘价;LCLOSE表示昨日收盘价。CHG,PCHG,VOTURNOVER,VAT分别表示涨跌额,涨跌幅,成交量,成交金额。如果你在浏览器中直接输入网址的话,会下载一个csv文件。如果直接用urllib.request来打开的话,会得到一长串字符串,里面包含了所有的数据,如下所示。需要自己用str.split(‘\r\n’)来截取

日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,成交量,成交金额
2015-09-11,’000001,上证指数,3200.234,3223.762,3163.449,3189.479,3197.893,2.341,0.0732,224557822,2.52769467178e+11
2015-09-10,’000001,上证指数,3197.893,3243.281,3178.904,3190.553,3243.089,-45.196,-1.3936,273261759,2.99581090523e+11
2015-09-09,’000001,上证指数,3243.089,3256.743,3165.696,3182.552,3170.452,72.637,2.2911,375327978,4.12991428267e+11
2015-09-08,’000001,上证指数,3170.452,3174.709,3011.117,3054.444,3080.42,90.032,2.9227,255415465,2.63910382052e+11
2015-09-07,’000001,上证指数,3080.42,3217.579,3066.304,3149.38,3160.167,-79.747,-2.5235,296468114,3.02689722336e+11

有几点需要指出,这里的指数代码前会加个 ’ 比如上面是’000001要把那个 ’ 去掉。还有,有些时候涨跌额和涨跌幅的值是None,简直莫名其妙,只能根据当日收盘价和前一天的收盘价自己补全;还有成交金额有几天的值也是None,这个似乎没法自己补,处理的时候需要特别注意

下面是代码。

import urllib,time,

def get_page(url):  #获取页面数据
    req=urllib.request.Request(url,headers={
        'Connection': 'Keep-Alive',
        'Accept': 'text/html, application/xhtml+xml, */*',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
    })
    opener=urllib.request.urlopen(req)
    page=opener.read()
    return page

def get_index_history_byNetease(index_temp):
    """ :param index_temp: for example, 'sh000001' 上证指数 :return: """
    index_type=index_temp[0:2]
    index_id=index_temp[2:]
    if index_type=='sh':
        index_id='0'+index_id
    if index_type=="sz":
        index_id='1'+index_id
    url='http://quotes.money.163.com/service/chddata.html?code=%s&start=19900101&end=%s&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER'%(index_id,time.strftime("%Y%m%d"))

    page=get_page(url).decode('gb2312') #该段获取原始数据
    page=page.split('\r\n')
    col_info=page[0].split(',')   #各列的含义
    index_data=page[1:]     #真正的数据

    #为了与现有的数据库对应,这里我还修改了列名,大家不改也没关系
    col_info[col_info.index('日期')]='交易日期'   #该段更改列名称
    col_info[col_info.index('股票代码')]='指数代码'
    col_info[col_info.index('名称')]='指数名称'
    col_info[col_info.index('成交金额')]='成交额'

    index_data=[x.replace("'",'') for x in index_data]  #去掉指数编号前的“'”
    index_data=[x.split(',') for x in index_data]

    index_data=index_data[0:index_data.__len__()-1]   #最后一行为空,需要去掉
    pos1=col_info.index('涨跌幅')
    pos2=col_info.index('涨跌额')
    posclose=col_info.index('收盘价')
    index_data[index_data.__len__()-1][pos1]=0      #最下面行涨跌额和涨跌幅为None改为0
    index_data[index_data.__len__()-1][pos2]=0
    for i in range(0,index_data.__len__()-1):       #这两列中有些值莫名其妙为None 现在补全
        if index_data[i][pos2]=='None':
            index_data[i][pos2]=float(index_data[i][posclose])-float(index_data[i+1][posclose])
        if index_data[i][pos1]=='None':
            index_data[i][pos1]=(float(index_data[i][posclose])-float(index_data[i+1][posclose]))/float(index_data[i+1][posclose])

    # print(col_info)
    return [index_data,col_info]

运行get_index_history_byNetease(‘sh000001’) 就能够得到上证指数所有的历史数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126307.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jrtplib学习

    jrtplib学习这是JRTPLIB@Conference系列的第三编《JRTPLIB的几个重要类说明》,本系列的主要工作是实现一个基于JRTPLIB的,建立在RTP组播基础上的多媒体视频会议系统。这只是一个实验系统,用于学习JRTPLIB、RTP、和多媒体相关的编程,不是一个完善的软件工程。而且,我只会在业余的时间出于兴趣写一写。有志同道合的朋友可以通过tinnal@136.com这个邮箱或博客回复(推荐)和我交

    2022年7月28日
  • git clone 显著提速,解决Github代码拉取速度缓慢问题[通俗易懂]

    git clone 显著提速,解决Github代码拉取速度缓慢问题[通俗易懂]对于国内用户来说,搬砖遇到clone Github速度十分缓慢的问题实在是一个令人头疼崩溃的问题。下面就介绍一个简单的方法很好的解决这个问题。方法:   1、注册码云账号   传送门   2、注册完成后点击页面右上角的“+” 号,选择新建项目创建新项目     3、在新页面中选择“导入已有项目”导入已有项目    4、复制需要导…

    2022年7月21日
  • Keil 使用教程(详解)「建议收藏」

    Keil 使用教程(详解)「建议收藏」(1)打开Keil,点击project新建(2)选择合适的型号,没有STC的选项,不要紧,一般C51的好多兼容的(3)不用汇编的话,下面的这个对话框选择否就可以了(4)点击新建一个文件(5)选择保存,并命名为.c(6)双击SourceGroup(7)添加.c文件(8)写完程序后,点击标号1处的按钮,然后点击标号2处的output,依次点击3和4,生成.hex文件…

    2022年5月10日
  • 四大Hybrid App移动开发平台对比

    四大Hybrid App移动开发平台对比[值得一用的Apps]四大HybridApp移动开发平台对比摘要:作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java、Object-C、C#等语言,还是选择继续使用网页开发,容忍HTML5功能的局限性?就在开发者左右为难的情况下HybridApp作为一个折中的解决方案诞生了。作者:来源:ZDNetCIO与应用频道|2013年04

    2022年5月31日
  • modis数据简介及批处理工具[通俗易懂]

    modis数据简介及批处理工具[通俗易懂]MODIS数据:MODIS是传感器而不是卫星(Landsat是卫星)MODIS传感器的全称为中分辨率成像光谱仪(moderate-resolutionimagingspectroradiometer),主要搭载在Terra和Aqua星上。MODIS命名规则:MOD09GA是产品名称,表示500米地表反射率产品。A2018179表示产品时间2018年第179天(以每年1…

    2022年5月30日
  • sort函数,我用总是莫名其妙的错

    sort函数,我用总是莫名其妙的错

    2021年9月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号