Python如何獲取實(shí)時(shí)股票信息的方法示例
如何獲取實(shí)時(shí)股票信息
股票信息的接口有很多,之前大家常用的是新浪的,但在年初的時(shí)候,新浪的接口突然不能使用,給大家造成了很大的困擾,為此網(wǎng)上也有很多教程教大家如何從新浪獲取數(shù)據(jù),跟著教程弄了半天也不行,索性換到126(也就是網(wǎng)易了),感覺速度都還不錯(cuò)。
首先我們看下接口地址:http://api.money.126.net/data/feed/1000001,money.api
其中的1000001就是股票代碼了,跟新浪的不同,他的第一位代表交易所,后面6位是股票代碼
- 0:上交所
- 1:深交所
- 2:北交所
先通過瀏覽器看下數(shù)據(jù)結(jié)構(gòu):
_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()中的就是標(biāo)準(zhǔn)的json數(shù)據(jù),我們只要通過正則表達(dá)式就可以取出。
我們先定義一個(gè)數(shù)據(jù)結(jié)構(gòu):
class NetTick:
def __init__(self, dict={}):
self.name = dict.get('name') # 股票名稱
self.yestclose = dict.get('yestclose') # 昨日收盤價(jià)
self.bidvol5 = dict.get('bidvol5') # 買5數(shù)量
self.bidvol4 = dict.get('bidvol4') # 買4數(shù)量
self.bidvol3 = dict.get('bidvol3') # 買3數(shù)量
self.bidvol2 = dict.get('bidvol2') # 買2數(shù)量
self.bidvol1 = dict.get('bidvol1') # 買1數(shù)量
self.bid5 = dict.get('bid5') # 買5價(jià)格
self.bid4 = dict.get('bid4') # 買4價(jià)格
self.bid3 = dict.get('bid3') # 買3價(jià)格
self.bid2 = dict.get('bid2') # 買2價(jià)格
self.bid1 = dict.get('bid1') # 買1價(jià)格
self.askvol5 = dict.get('askvol5') # 賣5數(shù)量
self.askvol4 = dict.get('askvol4') # 賣4數(shù)量
self.askvol3 = dict.get('askvol3') # 賣3數(shù)量
self.askvol2 = dict.get('askvol2') # 賣2數(shù)量
self.askvol1 = dict.get('askvol1') # 賣1數(shù)量
self.ask5 = dict.get('ask5') # 賣5價(jià)格
self.ask4 = dict.get('ask4') # 賣4價(jià)格
self.ask3 = dict.get('ask3') # 賣3價(jià)格
self.ask2 = dict.get('ask2') # 賣2價(jià)格
self.ask1 = dict.get('ask1') # 賣1價(jià)格
self.symbol = dict.get('symbol') # 股票代碼 第一位1:深交所 0:上交所 2北交所
self.volume = dict.get('volume') # 成交量
self.price = dict.get('price') # 當(dāng)前價(jià)格
self.open = dict.get('open') # 開盤價(jià)
self.low = dict.get('low') # 最低價(jià)
self.high = dict.get('high') # 最高價(jià)
self.code = dict.get('code') # 去除標(biāo)記為的股票代碼
self.turnover = dict.get('turnover') # 成交額
self.percent = dict.get('percent') # 漲跌幅
self.updown = dict.get('updown') # 漲跌金額
通過研究,我們發(fā)現(xiàn)126的接口支持多個(gè)股票查詢,那我們可以定義兩個(gè)方法,一個(gè)查單個(gè),一個(gè)查多個(gè),具體實(shí)現(xiàn)如下:
import requests
import re
from models.nettick import NetTick
from utils.packages import *
class NetEaseData:
@staticmethod
def get_realtime_data(symbol):
"""
網(wǎng)易的實(shí)時(shí)數(shù)據(jù)接口
: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('請(qǐng)求網(wǎng)易接口出錯(cuò),錯(cuò)誤信息:{}'.format(e))
return None
@staticmethod
def convert_market(other_market_code=str):
"""
轉(zhuǎn)換通用股票代碼 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=[]):
"""
網(wǎng)易的實(shí)時(shí)數(shù)據(jù)接口
: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('請(qǐng)求網(wǎng)易接口出錯(cuò),錯(cuò)誤信息:{}'.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:獲取單個(gè)股票NetEaseData.get_realtime_datas: 獲取多個(gè)股票數(shù)據(jù)
這里我股票代碼用的是兼容原有新浪模式的,你可以自己做下修改。
到此這篇關(guān)于Python如何獲取實(shí)時(shí)股票信息的方法示例的文章就介紹到這了,更多相關(guān)Python獲取實(shí)時(shí)股票信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python自動(dòng)化開發(fā)學(xué)習(xí)之三級(jí)菜單制作
這篇文章主要為大家詳細(xì)介紹了Python自動(dòng)化開發(fā)學(xué)習(xí)之三級(jí)菜單的制作方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
python時(shí)間日期函數(shù)與利用pandas進(jìn)行時(shí)間序列處理詳解
python標(biāo)準(zhǔn)庫包含于日期(date)和時(shí)間(time)數(shù)據(jù)的數(shù)據(jù)類型,datetime、time以及calendar模塊會(huì)被經(jīng)常用到,而pandas則可以對(duì)時(shí)間進(jìn)行序列化排序2018-03-03
Python通過內(nèi)置函數(shù)和自寫算法DFS實(shí)現(xiàn)排列組合
這篇文章主要介紹了Python通過內(nèi)置函數(shù)和自寫算法DFS實(shí)現(xiàn)排列組合,排列組合是數(shù)學(xué)中的一種常見的計(jì)算方法,用于求出從給定的元素中選取若干個(gè)元素的所有可能的排列或組合。在Python中,有多種方式可以實(shí)現(xiàn)排列組合的計(jì)算,需要的朋友可以參考下2023-05-05
python計(jì)算寄送包裹重量的實(shí)現(xiàn)過程
要實(shí)現(xiàn)這樣一個(gè)需求寄送包裹小于5kg,每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元計(jì)算,輸入重量,輸出應(yīng)付金額,下面小編給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2022-02-02
OpenCV-PS擴(kuò)散毛玻璃效果的實(shí)現(xiàn)代碼
PS的擴(kuò)散效果可以產(chǎn)生類似毛玻璃質(zhì)感的效果,使畫面有些毛毛的感覺。接下來通過本文給大家分享OpenCV-PS擴(kuò)散毛玻璃效果的實(shí)現(xiàn)代碼,一起看看吧2021-09-09
Python中將語音轉(zhuǎn)換為文本的實(shí)現(xiàn)方法
語音識(shí)別是計(jì)算機(jī)軟件識(shí)別口語中的單詞和短語并將其轉(zhuǎn)換為人類可讀文本的能力,在本教程中,您將學(xué)習(xí)如何使用SpeechRecognition 庫在 Python 中將語音轉(zhuǎn)換為文本,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下2024-01-01

