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’) 就能够得到上证指数所有的历史数据

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql添加索引造成的影响

    mysql添加索引造成的影响尽管添加索引可以优化SQL语句的性能,但是添加索引的同时也会带来不小的开销。尤其是在有大量的索引的情况下。mysql添加索引造成的影响如下:1、DML(数据操作语言)影响,在表上添加缩影会直接影响写操作性能(因为添加记录的同时还有创建相应记录的索引,这也是要耗资源的。)。2、DDL(数据定义语言)影响,随着表大小的不断增加,对性能的影响也会不断增加。比如:ALTER语句会耗费更多的时间…

  • 经纬度距离公式_经纬度差的计算

    经纬度距离公式_经纬度差的计算publicclassCaculateDistance{privatefinalstaticdoubleEARTH_RADIUS=6378.137;privatestaticdoublerad(doubled){ returnd*Math.PI/180.0;}/***根据两点间经纬度坐标(double值),计算两点间距离,单位为米*/publicstaticdoubleGetDistance(doublelat1,doubleln.

  • 编程语言中,取余和取模的区别

    编程语言中,取余和取模的区别编程语言中,取余和取模的区别

  • 贵金属黄金投资基础知识及技术交易篇「建议收藏」

    贵金属黄金投资基础知识及技术交易篇「建议收藏」贵金属黄金投资基础知识及技术交易篇  一、影响贵金属价格波动的因素  我们通常所说的贵金属主要指黄金和白银,由于它们的属性有很多共同点,所以价格走势基本相同,影响价格的因素也大同小异,皇玛hmcfds贵金属交易平台小编讲讲贵金属交易的基础知识:  1、供需关系:任何商品价格的波动本质因素都是供需关系的变化,贵金属也不例外。如果产量大幅增加就可能导致贵金属价格的下跌,如果投资交易、实物首…

  • phpstrom2021 激活码【2021免费激活】

    (phpstrom2021 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 理解OVER子句

    理解OVER子句

    2021年11月26日

发表回复

您的电子邮箱地址不会被公开。

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