如何使用python编程,获取单个个股的历史数据

【思路】

  1. 工具-Python程序的网络应用,可以使用requests模块
  2. 获取地址-网上随便一搜就可找到,我用的是搜狐股票数据
    【编程实现】

分析搜狐股票接口的语法

搜狐股票接口语法
网上搜索得到:语法为:‘https://q.stock.sohu.com/hisHq?code=cn_XXXXXX’,
第一步:在浏览器输入这句话,股票代码我们就以贵州茅台的代码600519。代替XXXXXX。那么这句话就是:‘https://q.stock.sohu.com/hisHq?code=cn_600519’
第二步:得到浏览器返回数据如下图:
搜狐浏览器返回的数据
第三步:我们在python里面编程实现它
3.1编写一个函数stk_req_jsontxt(url),这个函数通过给定的url,返回的就是上面浏览器返回的文本部分。

def stk_req_jsontxt(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    header = {'User-Agent': user_agent}
    s = requests.session()
    s.headers = header
    s.keep_alive = False  # 关闭多余连接
    r = s.get(url)
    r.encoding = chardet.detect(r.content)['encoding']
    #print('r.text\n',r.text)
    if 'An error occurred' in r.text:
        print('code not in use')
        return None
    return r.text

3.2我们在pycharm上运行一下这个函数,看打印出来的是什么。
运行的代码如下:

def stk_req_jsontxt(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    header = {'User-Agent': user_agent}
    s = requests.session()
    s.headers = header
    s.keep_alive = False  # 关闭多余连接
    r = s.get(url)
    r.encoding = chardet.detect(r.content)['encoding']
    #print('r.text\n',r.text)
    if 'An error occurred' in r.text:
        print('code not in use')
        return None
    return r.text
url='https://q.stock.sohu.com/hisHq?code=cn_600519'
rtext=stk_req_jsontxt(url)
print(rtext)

程序运行的打印结果如下图:
运行程序的打印输出
打印内容其实是json格式的文本,接下来我们使用json模块转换就可以转化成为我们需要的python格式的列表、字典等【这个具体查询json模块的使用教程】
输出分析:
我们看到上面图片中的内容很像一个列表,那么用如下语句可以把它转化为python的列表:

datalist=list(json.loads(rtext))

通过上面的办法,我们获得了个股的历史数据。分析得其数据格式为列表。我们进一步分析其数据结构,先运行如下代码:

url='https://q.stock.sohu.com/hisHq?code=cn_600519'
rtext=stk_req_jsontxt(url)
#print(rtext)
listdata=list(json.loads(rtext))
for i in range(len(listdata)):
    print(i)
    print(listdata[i])

输出为下面2图,第1图是最左侧,第2图是最右侧。受限于pycharm的输出超出屏幕,只能这样了。
在这里插入图片描述
在这里插入图片描述

通过分析上面函数的打印输出,我们可以知道,列表只有一个元素,所以只打了1个下标 0

列表的唯一元素是一个字典,假设该字典命名为dict,则它的key如下:“status”,“hq”,“code”。
而“hq”的value对应的则是一个2层嵌套列表,如果可以理解为
dict[hq]=[date1的数据列表,date2的数据列表,…dateN的数据列表]

我们通过如下的程序验证上面关于字典的猜想

url='https://q.stock.sohu.com/hisHq?code=cn_600519'
rtext=stk_req_jsontxt(url)
#print(rtext)
listdata=list(json.loads(rtext))
dict=listdata[0]
hisDataList=dict['hq']
for i in range(len(hisDataList)):
    print(i)
    print(hisDataList[i])

则运行后的打印输出为
在这里插入图片描述
在这里插入图片描述
由于滚动条关系,只贴了第一张图和最后一张图。我们看到,这就是打印了下标从0到79的共80个元素。每个元素又是一个固定数据结构的列表。因此证明前面关于字典的猜想是正确的。

接下来我们再来看个股数据,从而分析出内部嵌套列表的数据结构

先从股票网站找到贵州茅台的K线图
在这里插入图片描述
再比对k线图中体现的数据与我们上面程序运行的数据(下图)
在这里插入图片描述

我们发现,列表根据下标,对应的数据如下:
下标 内容
0 date(格式为yyyy-mm-dd)
1 开盘价
2 收盘价
3 涨跌幅度
4 …

如上,我们就可以成功地获取个股历史数据并得到想要的值。比如我要获取昨天的收盘价,代码如下:

listdata=list(json.loads(rtext))
dict=listdata[0]
hisDataList=dict['hq']
hisDataList.reverse()	
yesterdayClose=hisDataList[-2][2]
print('昨天收盘价为:',yesterdayClose)

输出如下:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙Draco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值