前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学编程021:获取股票实时行情数据

零基础学编程021:获取股票实时行情数据

作者头像
申龙斌
发布2018-03-06 10:48:07
2.7K0
发布2018-03-06 10:48:07
举报

春节期间重写了“笑来投资演练程序1.0版”这个程序,可以每个月自动更新几支股票的行情数据。程序的功能不复杂,但是编程新手想实现它仍有相当的困难。为了短时间内完成主要功能,我使用了最熟悉的C#编程语言,先看实际完成的效果图。

像学英语一样,只有“”英语才能学好英语,而我们学编程,只有“”编程解决实际问题,才能学好编程。所以将来我准备用Python语言把股票小程序再实现一遍,即:用Python写一个程序,可以每月更新几支股票的行情数据

单单凭这一句话是无从下手的,得先做需求分析,关于需求分析的话题以后再说,我简要地画了一张草图,把想实现的功能和原型记录了下来。

这张图考虑了一些后续的功能,但我只挑选了最基础的功能作为1.0版本。面对这样一个程序,利用《怎样解题》中的策略,要将其逐步简化直至我们可以应付:

  • 简化:先做一个无界面的程序,可以每月更新几支股票的行情数据
  • 再简化:写一个无界面程序,获取几支股票的行情数据
  • 再简化:写一个无界面程序,获取一支股票的行情数据
  • 再简化:写一个无界面程序,获取“谷歌”股票的行情数据
  • 再简化:写一个无界面程序,获取“谷歌”股票的当日开盘价

到了这里,问题就已经相当简化了,我们可以准备动手编程了,再把今天的问题描述清楚。

问题描述

不要界面,获取“谷歌”股票的当日开盘价。

问题分析:

以前谈过“零基础学编程”都需要哪些基础?先要会用谷歌搜索,我首先用的关键词:python、股票实时行情。

浏览并对比几个搜索结果,发现“Python获取新浪财经股票数据”这篇文章的原理最简单,不过文章中附带的源代码有问题。

解决过程:

1)先找到谷歌的股票代码

这个过程略过了,到新浪网上可以找到,直接给出结果:“gb_goog”。

2)试验一下文章中的办法是否可行

在电脑的浏览器中输入“http://hq.sinajs.cn/list=gb_goog”,立刻得到一串行情数据:

代码语言:javascript
复制
var hq_str_gb_goog="谷歌,824.16,0.63,2017-02-17 21:25:47,5.18,819.93,824.40,818.98,841.95,663.28,1287626,1182462,565835289600,27.88,29.56,0.00,1.03,0.00,0.00,686560000,71.00,821.67,-0.30,-2.49,Feb 17 08:25AM EST,Feb 16 04:00PM EST,818.98,485.00";

网上文章的说明完全正确,只是对于美股来说,开盘价之后并不是收盘价。

3)写代码,做试验

代码语言:javascript
复制
import urllib.request as req

with req.urlopen('http://hq.sinajs.cn/list=gb_goog') as f :
    hq = f.read()
    print(hq)

运行的结果:

代码语言:javascript
复制
b'var hq_str_gb_goog="\xb9\xc8\xb8\xe8,824.16,0.63,2017-02-17 21:25:47,5.18,819.93,824.40,818.98,841.95,663.28,1287626,1182462,565835289600,27.88,29.56,0.00,1.03,0.00,0.00,686560000,71.00,821.67,-0.30,-2.49,Feb 17 08:25AM EST,Feb 16 04:00PM EST,818.98,485.00";\n'

结果出来了,可惜在字符串前面有一个字母b,尾部多了\n,中间还有一串怪字符。查阅Python的语法说明,原来这个b表示得到的是二进制字符串,中文不能正常显示。有经验的程序员一眼可以猜出,那个神秘的 \xb9\xc8\xb8\xe8 应该是GBK或GB2312编码的“谷歌”。涉及到字符编码的问题,又是一个大坑,绝对可以讲上7天7夜,这里先不细说了。

4)修改源代码,正确显示中文

查urllib库的帮助文档,里面有一个例子,可以把二进制串转换为指定的编码字符集,我们猜测是GBK编码,只需更换这一行代码:

代码语言:javascript
复制
    hq = f.read().decode('GBK')

这次运行后中文可以正确显示,也没有了首字母b!

5)获得开盘价

汉字“谷歌”之后的数值824.16就是开盘价,而收盘价是哪一个暂不清楚,留在以后再说。我们只需要把824.16正确取出来就基本完成任务了。曾经在《生成群文章目录》这里介绍过CSV,这一串字符也是逗号分隔的,但只有一行,用Python自带的字符串函数就行了。

split( ',' ) 函数可以把一个字符串从逗号的位置切开,生成一个列表,而v[1]就是824.16,正是我们想要的开盘价。再修改一下代码,任务完成。

代码语言:javascript
复制
    v = hq.split(',')
    print( v[1] )

小结:

  • 复杂的问题先分解
  • 学会使用搜索
  • 用到了urllib库
  • 以b字符开头的串是二进制串
  • 二进制的知识一定要学会,计算机只认二进制
  • 字符集转换是个复杂的坑,老程序员都被坑无数
  • split 函数可以切分出一个列表

--- END ---

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档