春节期间重写了“笑来投资演练程序1.0版”这个程序,可以每个月自动更新几支股票的行情数据。程序的功能不复杂,但是编程新手想实现它仍有相当的困难。为了短时间内完成主要功能,我使用了最熟悉的C#编程语言,先看实际完成的效果图。
像学英语一样,只有“用”英语才能学好英语,而我们学编程,只有“用”编程解决实际问题,才能学好编程。所以将来我准备用Python语言把股票小程序再实现一遍,即:用Python写一个程序,可以每月更新几支股票的行情数据。
单单凭这一句话是无从下手的,得先做需求分析,关于需求分析的话题以后再说,我简要地画了一张草图,把想实现的功能和原型记录了下来。
这张图考虑了一些后续的功能,但我只挑选了最基础的功能作为1.0版本。面对这样一个程序,利用《怎样解题》中的策略,要将其逐步简化直至我们可以应付:
到了这里,问题就已经相当简化了,我们可以准备动手编程了,再把今天的问题描述清楚。
问题描述:
不要界面,获取“谷歌”股票的当日开盘价。
问题分析:
以前谈过“零基础学编程”都需要哪些基础?先要会用谷歌搜索,我首先用的关键词:python、股票实时行情。
浏览并对比几个搜索结果,发现“Python获取新浪财经股票数据”这篇文章的原理最简单,不过文章中附带的源代码有问题。
解决过程:
1)先找到谷歌的股票代码
这个过程略过了,到新浪网上可以找到,直接给出结果:“gb_goog”。
2)试验一下文章中的办法是否可行
在电脑的浏览器中输入“http://hq.sinajs.cn/list=gb_goog”,立刻得到一串行情数据:
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)写代码,做试验
import urllib.request as req
with req.urlopen('http://hq.sinajs.cn/list=gb_goog') as f :
hq = f.read()
print(hq)
运行的结果:
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编码,只需更换这一行代码:
hq = f.read().decode('GBK')
这次运行后中文可以正确显示,也没有了首字母b!
5)获得开盘价
汉字“谷歌”之后的数值824.16就是开盘价,而收盘价是哪一个暂不清楚,留在以后再说。我们只需要把824.16正确取出来就基本完成任务了。曾经在《生成群文章目录》这里介绍过CSV,这一串字符也是逗号分隔的,但只有一行,用Python自带的字符串函数就行了。
split( ',' ) 函数可以把一个字符串从逗号的位置切开,生成一个列表,而v[1]就是824.16,正是我们想要的开盘价。再修改一下代码,任务完成。
v = hq.split(',')
print( v[1] )
小结:
--- END ---
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有