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

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

作者头像
申龙斌
发布于 2018-03-06 02:48:07
发布于 2018-03-06 02:48:07
2.9K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

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

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

问题描述

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

问题分析:

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

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

解决过程:

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
import urllib.request as req

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

运行的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
    hq = f.read().decode('GBK')

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

5)获得开盘价

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    v = hq.split(',')
    print( v[1] )

小结:

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

--- END ---

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点
1. iOS中的事件基本介绍 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 1.1 事件可以分为三大类型,并且UIResponder内部提供了相应方法来处理事件 1. 触摸事件 //一根或者多根手指开始触摸view时自动调用view的下面方法 - (void)touchesBegan
xx_Cc
2018/05/10
1.7K0
iOS 小技能: Responder Chain(响应者链)【上篇】
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。
公众号iOS逆向
2022/08/22
1.2K0
iOS 小技能: Responder Chain(响应者链)【上篇】
史上最详细的iOS之事件的传递和响应机制-原理篇
按照时间顺序,事件的生命周期是这样的:   事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view、寻找最合适的view的底层实现、拦截事件的处理)->找到最合适的view后事件的处理(touches方法的重写,也就是事件的响应)
VV木公子
2018/06/05
11.5K0
史上最详细的iOS之事件的传递和响应机制-原理篇
iOS 小技能: Responder Chain(响应者链)【下篇】
4个触摸事件处理方法中,都有NSSet *touches和UIEvent *event两个参数。
公众号iOS逆向
2022/08/22
1K0
iOS 小技能: Responder Chain(响应者链)【下篇】
iOS-控件响应用户控制事件之事件处理
事件处理 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder内部提供了以下方法来处理事件 这些类可以覆盖下列几个方法处理不同的触摸事件 ```objc //触摸事件 (void)touchesBegan:(NSSet )touches with
用户1941540
2018/05/11
1K0
UI篇-UIResponder之事件传递和响应精析
这篇文章只讨论触摸事件。对于触摸事件UIResponder内部提供了以下方法来处理事件:
進无尽
2018/09/12
2.6K0
UI篇-UIResponder之事件传递和响应精析
touchesBegan 触摸事件
1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:
全栈程序员站长
2022/09/15
8820
iOS14开发-触摸与手势识别
用于描述触摸的窗口、位置、运动和力度。一个手指触摸屏幕,就会生成一个 UITouch 对象,如果多个手指同时触摸,就会生成多个 UITouch 对象。
YungFan
2021/05/10
2.4K0
iOS 中的事件响应
iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论。
CoderStar
2022/08/24
2.9K0
iOS 中的事件响应
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
应用场景:比如设计给我们的是一张黑色的返回箭头图.我们某个页面需要弄成白色的话.又不想重新设计一下新的图片
公众号iOS逆向
2021/07/29
1.7K0
touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event
一、概念介绍 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 事件类型.png 响应者对象UIResponder 在iOS中不是任何
用户2141756
2018/05/18
2.7K0
iOS中手势的应用1. 四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用
iOS设备现如今大受欢迎的最重要原因之一就在于其开创了触控操作的潮流。发展到现在,无论是Android还是iPhone,现在APP与用户进行交互,基本上都是依赖于各种各样的触控事件。例如用户对屏幕进行了侧滑,APP就需要对这个手势进行相应的处理,给用户一个反馈。这些相应的事件就都是在UIResponder中定义的。 广告插播的措不及防:如果您要是觉得这篇文章让您有点收获,随手点个赞会让俺兴奋好久吶。 UIResponder大体有四类事件:触摸、加速计、远程控制、按压(iOS9.0以后出来的,3DTou
stanbai
2018/06/28
2.4K0
iOS小技能: 限制按钮的点击频率(Target-Action设计模式的运用)
在项目开发中,会对数据库数据进行更新操作的接口请求,不仅服务器侧需要控制请求频率以及保证数据的唯一性和一致性,app侧也需要进行限制来避免产生垃圾数据
公众号iOS逆向
2022/08/22
8930
iOS小技能: 限制按钮的点击频率(Target-Action设计模式的运用)
iOS开发实战-上架AppStore 通过内购和广告获得收益写在前面效果分析代码部分补充Demo地址
忽然发现手头上也没什么独立App,那就随便写个放到AppStore上吧,凑个数吧。哈哈哈。
gwk_iOS
2018/08/23
1.3K0
iOS开发实战-上架AppStore 通过内购和广告获得收益写在前面效果分析代码部分补充Demo地址
iOS_系统自带地图圆形区域选择范围
5.聚集操作:删除原理的大头针,在新经纬度添加大头针,并将地图移动到新的经纬度(反地理编码获得位置信息)
mikimo
2022/07/20
2.3K0
iOS_系统自带地图圆形区域选择范围
iOS开发之地图
在iOS开发中,地图也是很多App都需要使用的功能。本文主要对iOS中的地图知识点进行介绍。需要说明的是地图看似很复杂,其实它仅仅是一个控件,就和UIButton、UITableView等一样。本文代码环境为:Xcode 10.2。
YungFan
2019/05/10
1.2K0
iOS开发之地图
iOS 小技能:响应者链的事件传递过程、手势识别器的使用步骤、抽屉效果的实现
为了完成手势识别,必须借助于手势识别器UIGestureRecognizer。利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势。
公众号iOS逆向
2022/08/22
9170
iOS 小技能:响应者链的事件传递过程、手势识别器的使用步骤、抽屉效果的实现
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
前段时间闲着无聊和盆友就搞了个图床站Chevereto-Free,忽然发现居然有API提供,而且很简单,只需要一个KEY就可以
gwk_iOS
2018/08/23
1K0
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
【IOS开发进阶系列】手势专题
        iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:
江中散人_Jun
2023/10/16
5510
【IOS开发进阶系列】手势专题
一份走心的iOS开发规范
说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变得越来越庞大。同时,app投入的开发者也也越来越多,不同的开发者的code风格千差万别。加之公司开发者人员变动,为了保证app稳定性,保证开发效率,统一开发风格。于是,这篇iOS开发规范应运而生。 因笔者现在所就职公司的开发规范主导编写,目前公司业务的迭代都在按照这个规范在有条不紊的进行。综合之前编写规范的经验,历时一个月的时间,断断续续重新梳理了一份比较全面、比较完整的iOS开发者规范,希望这些条条框框能够给正在阅读的你提供一些参考的价值。也希望越来越多的iOS开发者能够养成优秀的编码习惯。如果你觉得个别地方不妥或者有需要补充的规范,请留言或者私信,我会第一时间响应。
VV木公子
2018/06/05
12.1K0
推荐阅读
相关推荐
iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档