python 获取股票实时行情,python抓取实时股票行情

  python 获取股票实时行情,python抓取实时股票行情

  本文主要介绍Python如何获取实时股票信息。通过示例代码非常详细,对大家的学习或者工作都有一定的参考价值。让我们和边肖一起学习。

  

如何获取实时股票信息

  股票信息有很多界面。之前常用新浪,但是年初新浪的界面突然不能用了,给大家造成了很大的困扰。为此,网上也有很多教程教你如何从新浪获取数据。跟着教程看了很久,还是不行。干脆换成126(也就是网易),速度还不错。

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

  其中1000001是股票代码,和新浪的不一样。第一位代表交易所,后六位是股票代码。

  0:上交所1:深交所2:北交所先通过浏览器看数据结构:

  _ntes_quote_callback({

  1000001: {

  代码 : 1000001 :

  百分比 : 0.002113,

  高 : 14.25,

  askvol3: 1026758,

  askvol2: 810700,

  askvol5: 290493,

  askvol4: 461100,

  价格 : 14.23,

  打开: 14.2,

  bid5: 14.18,

  bid4: 14.19,

  bid3: 14.2,

  bid2: 14.21,

  bid1: 14.22,

  低 : 14.11,

  向上向下 : 0.03,

  类型 : SZ :

  bidvol1: 323600,

  状态 : 0,

  bidvol3: 244200,

  bidvol2: 673474,

  符号 : 000001 :

  更新 : 2022/06/25 17:59:57 ,

  bidvol5: 343500,

  bidvol4: 145200,

  卷: 86604061,

  askvol1: 817268,

  ask5: 14.27,

  ask4: 14.26,

  ask1: 14.23,

  名称 : 平安银行:

  ask3: 14.25,

  ask2: 14.24,

  箭头 : ,

  时间 : 2022/06/24 16:00:58 ,

  昨日收盘: 14.2,

  营业额: 1227798687.09

  }

  });

  可以看到,in _ntes_quote_callback()里面是标准的json数据,我们通过正则表达式取出来就可以了。

  让我们先定义一个数据结构:

  NetTick:类

  def __init__(self,dict={}):

  Self.name=dict.get(name) #股票名称

  self . yes close=dict . get( yes close )#昨日收盘价

  自我。bid vol 5=dict . get( bid vol 5 )# buy 5数量

  自我。bid vol 4=dict . get( bid vol 4 )# buy 4数量

  自我。bid vol 3=dict . get( bid vol 3 )# buy 3数量

  自我。bid vol 2=dict . get( bid vol 2 )# buy 2数量

  自我。bid vol 1=dict . get( bid vol 1 )# buy 1数量

  self . bid 5=dict . get( bid 5 )# buy 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获取实时股票信息内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: