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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest测试框架和unittest_python列表生成式

    pytest测试框架和unittest_python列表生成式一、核心要素(1)TestCase测试用例一个.py脚本就是一个测试用例测试用例类必须继承于unittest.TestCase类中的方法名必须以test开头,否则不会被执行类的外部写main方法(自测代码)(2)TestSuite测试套件测试套件就是测试用例的集合把多个测试用例集合到一起就构成了测试套件测试套件不能直接执行(3)TextTestR…

    2022年10月14日
    3
  • databus 支持oracle么,Databus[通俗易懂]

    databus 支持oracle么,Databus[通俗易懂]系统如果要应付大规模的请求,一条必经之路就是数据库的分割,单服务器的性能早晚都会成为负载的短板。而数据库分割,通常有Master/Salve或者集群Cluster的方式,这些方式通常都是基于同种类型的数据。对于一个庞大的多类型数据库的系统,在不同的数据库之间(甚至是不同地理位置的机房间)保持数据的同步,需要更复杂的解决方案。LinkedIn良心开源了内部的一个项目Databus,正是解决这个问题的…

    2022年10月17日
    2
  • c++语言入门教程–16c++ 中的 String 类

    c++语言入门教程–16c++ 中的 String 类

    2021年3月12日
    162
  • kmplayer字幕乱码_VLC中文字幕乱码问题

    kmplayer字幕乱码_VLC中文字幕乱码问题今天拷了个《活着》,本想在熄灯之前能看完的,但是这个字幕乱码,折腾了近一个小时,边磕瓜子边google,终于解决了。我的系统是Ubuntu10.10,mplayer是没有GUI的,只能命令行播放。可能在中文环境下不会有什么问题,用加-subcpgbk的方法。但是我的系统是英文环境,所以才费了好多周折,中文一直是下划线。后来看到这篇文章:http://bbs.dospy.com/threa…

    2025年6月23日
    3
  • 深入理解双亲委派机制及作用「建议收藏」

    java双亲委派机制及作用一、什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。二、类加载器BootstrapClassLoader(启动类加载器)c++…

    2022年4月17日
    76
  • muduo网络库使用心得

    muduo网络库使用心得

    2021年12月9日
    57

发表回复

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

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