Python如何获取实时股票信息的方法示例

 更新时间:2022年06月26日 08:48:02   作者:James.Ying  
本文主要介绍了Python如何获取实时股票信息的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

如何获取实时股票信息

股票信息的接口有很多,之前大家常用的是新浪的,但在年初的时候,新浪的接口突然不能使用,给大家造成了很大的困扰,为此网上也有很多教程教大家如何从新浪获取数据,跟着教程弄了半天也不行,索性换到126(也就是网易了),感觉速度都还不错。

首先我们看下接口地址:http://api.money.126.net/data/feed/1000001,money.api

其中的1000001就是股票代码了,跟新浪的不同,他的第一位代表交易所,后面6位是股票代码

  • 0:上交所
  • 1:深交所
  • 2:北交所

先通过浏览器看下数据结构:

_ntes_quote_callback({
    "1000001": {
        "code": "1000001",
        "percent": 0.002113,
        "high": 14.25,
        "askvol3": 1026758,
        "askvol2": 810700,
        "askvol5": 290493,
        "askvol4": 461100,
        "price": 14.23,
        "open": 14.2,
        "bid5": 14.18,
        "bid4": 14.19,
        "bid3": 14.2,
        "bid2": 14.21,
        "bid1": 14.22,
        "low": 14.11,
        "updown": 0.03,
        "type": "SZ",
        "bidvol1": 323600,
        "status": 0,
        "bidvol3": 244200,
        "bidvol2": 673474,
        "symbol": "000001",
        "update": "2022/06/25 17:59:57",
        "bidvol5": 343500,
        "bidvol4": 145200,
        "volume": 86604061,
        "askvol1": 817268,
        "ask5": 14.27,
        "ask4": 14.26,
        "ask1": 14.23,
        "name": "平安银行",
        "ask3": 14.25,
        "ask2": 14.24,
        "arrow": "↑",
        "time": "2022/06/24 16:00:58",
        "yestclose": 14.2,
        "turnover": 1227798687.09
    }
});

可以看出_ntes_quote_callback()中的就是标准的json数据,我们只要通过正则表达式就可以取出。
我们先定义一个数据结构:

class NetTick:
    def __init__(self, dict={}):
        self.name = dict.get('name')                # 股票名称
        self.yestclose = dict.get('yestclose')      # 昨日收盘价
        self.bidvol5 = dict.get('bidvol5')          # 买5数量
        self.bidvol4 = dict.get('bidvol4')          # 买4数量
        self.bidvol3 = dict.get('bidvol3')          # 买3数量
        self.bidvol2 = dict.get('bidvol2')          # 买2数量
        self.bidvol1 = dict.get('bidvol1')          # 买1数量
        self.bid5 = dict.get('bid5')                # 买5价格
        self.bid4 = dict.get('bid4')                # 买4价格
        self.bid3 = dict.get('bid3')                # 买3价格
        self.bid2 = dict.get('bid2')                # 买2价格
        self.bid1 = dict.get('bid1')                # 买1价格
        self.askvol5 = dict.get('askvol5')          # 卖5数量
        self.askvol4 = dict.get('askvol4')          # 卖4数量
        self.askvol3 = dict.get('askvol3')          # 卖3数量
        self.askvol2 = dict.get('askvol2')          # 卖2数量
        self.askvol1 = dict.get('askvol1')          # 卖1数量
        self.ask5 = dict.get('ask5')                # 卖5价格
        self.ask4 = dict.get('ask4')                # 卖4价格
        self.ask3 = dict.get('ask3')                # 卖3价格
        self.ask2 = dict.get('ask2')                # 卖2价格
        self.ask1 = dict.get('ask1')                # 卖1价格
        self.symbol = dict.get('symbol')            # 股票代码 第一位1:深交所 0:上交所 2北交所
        self.volume = dict.get('volume')            # 成交量
        self.price = dict.get('price')              # 当前价格
        self.open = dict.get('open')                # 开盘价
        self.low = dict.get('low')                  # 最低价
        self.high = dict.get('high')                # 最高价
        self.code = dict.get('code')                # 去除标记为的股票代码
        self.turnover = dict.get('turnover')        # 成交额
        self.percent = dict.get('percent')          # 涨跌幅
        self.updown = dict.get('updown')            # 涨跌金额

通过研究,我们发现126的接口支持多个股票查询,那我们可以定义两个方法,一个查单个,一个查多个,具体实现如下:

import requests
import re
from models.nettick import NetTick
from utils.packages import *



class NetEaseData:
    @staticmethod
    def get_realtime_data(symbol):
        """
        网易的实时数据接口
        :param symbol: 股票代码
        :return: Tick
        """
        code = NetEaseData.convert_market(symbol)
        try:
            response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(code)).text
            re_find = NetEaseData.__re_find(response)
            if re_find is not None:
                find_stock = re_find.get(code)
                if find_stock is not None:
                    return NetTick(find_stock)

        except Exception as e:
            logger.error('请求网易接口出错,错误信息:{}'.format(e))

        return None

    @staticmethod
    def convert_market(other_market_code=str):
        """
        转换通用股票代码 sz sh bj开头+股票代码
        """
        if other_market_code[0:2].lower() == 'sh':
            return '0' + other_market_code[2:]
        elif other_market_code[0:2].lower() == 'sz':
            return '1' + other_market_code[2:]
        else:
            return '2' + other_market_code[2:]


    @staticmethod
    def get_realtime_datas(symbols=[]):
        """
        网易的实时数据接口
        :param symbols: 股票代码列表
        :return: Ticks列表
        """
        codes = [NetEaseData.convert_market(code) for code in symbols]
        result = []
        try:
            response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(','.join(codes))).text
            re_find = NetEaseData.__re_find(response)
            if re_find is not None:
                for code in re_find:
                    item = re_find[code]
                    result.append(NetTick(item))
        except Exception as e:
            logger.error('请求网易接口出错,错误信息:{}'.format(e))

        return result

    @staticmethod
    def __re_find(response):
        find = re.findall(r"_ntes_quote_callback\((.*)\);", response)
        if len(find) >= 1:
            return to_obj(find[-1])

        return None


if __name__ == '__main__':
    ticks = NetEaseData.get_realtime_datas(['sh588000', 'sz000001', 'bj831010'])
    [print(tick.symbol, tick.name, tick.price) for tick in ticks]
    tick = NetEaseData.get_realtime_data('sz127045')
    print(tick.symbol, tick.name, tick.price)

使用也非常简单

  • NetEaseData.get_realtime_data:获取单个股票
  • NetEaseData.get_realtime_datas : 获取多个股票数据

这里我股票代码用的是兼容原有新浪模式的,你可以自己做下修改。

到此这篇关于Python如何获取实时股票信息的方法示例的文章就介绍到这了,更多相关Python获取实时股票信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python自动化开发学习之三级菜单制作

    Python自动化开发学习之三级菜单制作

    这篇文章主要为大家详细介绍了Python自动化开发学习之三级菜单的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 解决pycharm 安装numpy失败的问题

    解决pycharm 安装numpy失败的问题

    今天小编就为大家分享一篇解决pycharm 安装numpy失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python爬虫破解字体加密案例详解

    python爬虫破解字体加密案例详解

    这篇文章主要介绍了python爬虫破解字体加密案例详解,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python时间日期函数与利用pandas进行时间序列处理详解

    python时间日期函数与利用pandas进行时间序列处理详解

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到,而pandas则可以对时间进行序列化排序
    2018-03-03
  • python字典多键值及重复键值的使用方法(详解)

    python字典多键值及重复键值的使用方法(详解)

    下面小编就为大家带来一篇python字典多键值及重复键值的使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个才参考。一起跟随小编过来看看吧
    2016-10-10
  • Python通过内置函数和自写算法DFS实现排列组合

    Python通过内置函数和自写算法DFS实现排列组合

    这篇文章主要介绍了Python通过内置函数和自写算法DFS实现排列组合,排列组合是数学中的一种常见的计算方法,用于求出从给定的元素中选取若干个元素的所有可能的排列或组合。在Python中,有多种方式可以实现排列组合的计算,需要的朋友可以参考下
    2023-05-05
  • python计算寄送包裹重量的实现过程

    python计算寄送包裹重量的实现过程

    要实现这样一个需求寄送包裹小于5kg,每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元计算,输入重量,输出应付金额,下面小编给大家分享实现代码,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • OpenCV-PS扩散毛玻璃效果的实现代码

    OpenCV-PS扩散毛玻璃效果的实现代码

    PS的扩散效果可以产生类似毛玻璃质感的效果,使画面有些毛毛的感觉。接下来通过本文给大家分享OpenCV-PS扩散毛玻璃效果的实现代码,一起看看吧
    2021-09-09
  • python 模拟在天空中放风筝的示例代码

    python 模拟在天空中放风筝的示例代码

    这篇文章主要介绍了python 模拟放风筝的示例代码,帮助大家更好的利用python处理图像,感兴趣的朋友可以了解下
    2021-04-04
  • Python中将语音转换为文本的实现方法

    Python中将语音转换为文本的实现方法

    语音识别是计算机软件识别口语中的单词和短语并将其转换为人类可读文本的能力,在本教程中,您将学习如何使用SpeechRecognition 库在 Python 中将语音转换为文本,文中有相关的代码供大家参考,需要的朋友可以参考下
    2024-01-01

最新评论