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


相关推荐

  • MySQL 8.0修改密码_oracle和mysql区别

    MySQL 8.0修改密码_oracle和mysql区别1、mysql-uroot-p’原来的密码’ //进入数据库中2、showdatabases;3、usemysql;4、使用下面的语句修改密码:  ALTERUSER’root’@’localhost’IDENTIFIEDWITHmysql_native_passwordBY’你的密码’;    ALTERUSER’root’@’lo…

    2022年8月12日
    5
  • navigator对象属性_javascript构造函数

    navigator对象属性_javascript构造函数Navigator对象包含有关浏览器的信息。注意:没有应用于navigator对象的公开标准,不过所有浏览器都支持该对象。Navigator对象属性属性 说明 appCodeName 返回浏览器的代码名 appName 返回浏览器的名称 appVersion 返回浏览器的平台和版本信息 cookieEnabled 返回指明浏览器中是否启用cookie的布尔值 platform 返回运行浏览器的操作系统平台 userAgen.

    2025年10月27日
    1
  • Linux——vi命令详解[通俗易懂]

    Linux——vi命令详解[通俗易懂]vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

    2022年6月9日
    88
  • 笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式

    笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式只要是联网大型程序运行中出现了卡顿现象,我们总是习惯性的认为这是服务器卡或网络不流畅的问题,然而事实并非如此。尤其是如果你在用笔记本电脑,那么就请先好好找找自己笔记本电脑的问题吧。这个话题特别有意义,因为现在笔记本电脑在大城市普及到几乎小青年人手一台的程度,随着生活节奏不断加快,留给各位在家安安心心用台式机的机会是越来越少了,如何把笔记本电脑调教到运行流畅的效果,让各位工作高效顺利,让各位玩游戏玩

    2025年10月30日
    3
  • mysql主主搭建配置

    mysql主主搭建配置

    2021年8月22日
    46
  • 基础数论略讲

    基础数论略讲

    2021年9月28日
    41

发表回复

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

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