python股票数据分析_用Python抓取新浪的股票数据「建议收藏」

最近做数据分析,先是找到了Tushare这个免费开源的第三方财经包,但后来用了几天之后发现,它的日交易历史数据有时候有不准确的情况,查看源代码发现,这个包的数据源是凤凰财经,而对比凤凰网站其站点的数据本身就是有出入的,所以到也不是Tushare的问题。于是百度了一圈,发现很多网友都是获取新浪的股票数据,包括其历史数据和实时数据。于是乎试了一下,发现速度还挺快,没有具体去测时间但从感官上要比Tush…

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

最近做数据分析,先是找到了Tushare这个免费开源的第三方财经包,但后来用了几天之后发现,它的日交易历史数据有时候有不准确的情况,查看源代码发现,这个包的数据源是凤凰财经,而对比凤凰网站其站点的数据本身就是有出入的,所以到也不是Tushare的问题。于是百度了一圈,发现很多网友都是获取新浪的股票数据,包括其历史数据和实时数据。于是乎试了一下,发现速度还挺快,没有具体去测时间但从感官上要比Tushare获取的凤凰数据要快得多。并且数据也很丰富,囊括了每只票自上市以来的所有数据,对此Tushare貌似只有三年数据。当然,新浪数据也有不足的地方,细节上没凤凰数据那么丰富,没有价MA5、MA10以及量MA5、MA10等等,最重要的还是缺少每天的交易额。所幸我目前计算所需的数据里还不包括每天交易额。

新浪财经的数据接口地址是:http://money.finance.sina.com.cn/quotes_service/api/jsonp_v2.php/var=/CN_MarketData.getKLineData?symbol=sz000001&scale=240&ma=no&datalen=60。在地址里symbol指的是股票代码,这里需要注意的是不能只填数字代码,还需要把交易市场的前缀加上去,比如sz000001指的是平安银行,而sh000001则是上证指数;scale表示的是时间长度,以分钟为基本单位,输入240就表示下载日K线数据,60就是小时K线数据,貌似最短时间是5分钟,并没有提供分钟数据;datalen则是获取数据的条数,在日K线的时间长度了,datalen就是获取60天日K数据,当然也可以获取60小时K数据。

人生苦短,我用Python,所以代码就用它了,其实以前一直是用世界上最好的语言PHP 的,这是为了做数据分析才开始学着用Python,代码粗糙了些,返回的是个列表,每笔数据则是字典,将就着看吧。

import urllib.request

links = ‘http://money.finance.sina.com.cn/quotes_service/api/jsonp_v2.php/var=/CN_MarketData.getKLineData?symbol=’ + code + ‘&scale=’ + str(scale) + ‘&ma=no&datalen=’+str(datalen)

histData = urllib.request.urlopen(links).read()

histData = str(histData).split(‘[‘)[1]

histData = histData[1:len(histData) – 4].split(‘},{‘)

datas = []

for i in range(0, len(histData)):

column = {}

dayData = histData[i].split(‘,’)

for j in range(0, len(dayData)):

field = dayData[j].split(‘:”‘)

if field[0] == ‘day’:

column[‘date’] = field[1].replace(‘”‘, ”)

else:

column[field[0]] = field[1].replace(‘”‘, ”)

datas.append(column)

return datas

PS:这里要说明的是新浪默认字段里,日期字段名称是day,个人觉得很是膈应,如果是小时数据或者5分钟数据还叫day岂不难受?所以改成了 date,其实没什么大的意义,个人喜好而已。

实时数据获取方式和历史数据差别不大,需要的也是完整代码,地址是:http://hq.sinajs.cn/list=sz000001,不同的是实时数据可以多支同时获取的,代码之间用逗号隔开就可以了,经过实验,貌似最多一次可以获取100只票的实时数据。

links = ‘http://hq.sinajs.cn/list=’ + codes

realTimeData = urllib.request.urlopen(links).read()

realTimeData = realTimeData.decode(‘gbk’).replace(‘”‘,”).split(‘\n’)

data = {}

for i in range(len(realTimeData)-1):

if len(realTimeData[i]) > 0:

data[realTimeData[i].split(‘=’)[0].split(‘_’)[2][2:]] = realTimeData[i].split(‘=’)[1].split(‘,’)[:-1]

return data

PS:大家获取可别太多线程,我试过,会被封。

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

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

(0)
上一篇 2022年4月7日 上午9:40
下一篇 2022年4月7日 上午10:00


相关推荐

  • 织梦CMS提示DedeTag Engine Create File False错误的解决办法总结

    织梦CMS提示DedeTag Engine Create File False错误的解决办法总结

    2021年9月19日
    48
  • springboot集成mybatisplus分页_mybatis分页查询原理

    springboot集成mybatisplus分页_mybatis分页查询原理1、导入依赖(maven)pom.xml<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper-mybat…

    2025年11月10日
    8
  • Oracle创建本地数据库实例及配置「建议收藏」

    Oracle创建本地数据库实例及配置「建议收藏」        因为以前一直都是用的mysql的数据库,所以当新工作中用到Oracle数据库的时候,一时还有点不习惯,特别是一直连接的远程数据库,更是麻烦,所以就想在本地创建一个Oracle的数据库,然后导入数据库的备份文件方便使用。然而看似简单的东西,真正动起手来,却也还是花了好一会儿工夫也才解决。所以希望能够把安装的过程记录下来,不仅方便自己以后查阅,也能督促自己开始写博客(3年前就有这样的想…

    2022年5月31日
    134
  • Vue进阶(四十七):面试必备:2022 Vue经典面试题总结(含答案)

    Vue进阶(四十七):面试必备:2022 Vue经典面试题总结(含答案)面试必备:2019Vue经典面试题总结(含答案)一、什么是MVVM?MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View代表UI组件,它负责将数据模型转化成UI展现出来,ViewModel是一个同步View和Model的对象。在MVVM架构下,View和Mod…

    2022年6月13日
    51
  • crunch使用方法_launch中文

    crunch使用方法_launch中文名字   crunch-从一个字符集中产生对应的字典简介   crunch[][选项]注:中括号里面的是可选项说明   crunch能够根据你给定的标准来产生字典。并且可以将结果输出到屏幕,文件或者其它程序。参数   最小长度      你想要让crunch产生的字符串的最小长度。这个参数即使不会用到也必须填写。   最

    2025年6月2日
    5
  • 命名规范与规则

    命名规范与规则命名规范1、项目名全部小写,就是如果项目名是多个英语单词组成的,每个单词都要全部小写。如:doubanssm。2、包名全部小写。3、类名首字母大写,若类名由多个单词构成,每个单词首字母大写,即

    2022年7月1日
    35

发表回复

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

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