← 返回博客列表

【零依赖量化数据实战 #01】沪深实时行情:3 行 Python 拿到最新报价

2026年08月20日 08:02 · 智兔数服 · 零依赖量化数据实战

摘要:【零依赖量化数据实战 #01】沪深实时行情:3 行 Python 拿到最新报价 系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想用 Python 拉 A 股(沪/

系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想用 Python 拉 A 股(沪/深)实时行情、做自选股监控、接价格预警的开发者

你将得到什么

  • requests 一个 GET 拿到单只沪深股票的实时快照(最新价、涨跌幅、名称等)
  • 一个对字段名「不敏感」的解析函数,接口返回结构微调也不崩
  • 处理 102 / 104 错误码的正确姿势(不是收盘没数据,是证书权限
  • 完整可复制运行的代码,把 你的智兔token 换成真实证书即可直接跑

一、先把实时行情拉下来

智兔沪深实时行情接口(公开文档 hsdataapi.html 覆盖):

GET https://api.zhituapi.com/hs/real/ssjy/{code}

{code} 是沪深代码,如 600519(贵州茅台)、000001(平安银行)。token 用查询参数带上。

先写一个最朴素的版本,确认链路通:

import requests

TOKEN = "你的智兔token"            # ← 换成你的真实智兔 token
BASE = "https://api.zhituapi.com"

def fetch_realtime(code, token=TOKEN):
    url = f"{BASE}/hs/real/ssjy/{code}"
    r = requests.get(url, params={"token": token}, timeout=10)
    r.raise_for_status()
    return r.json()

就这么几行。下面把它写得更稳——网络异常、非 200、非 JSON 都兜住,统一返回 (data, err)

import sys, time, requests

TOKEN = "你的智兔token"            # ← 换成你的真实智兔 token
BASE = "https://api.zhituapi.com"

def fetch_realtime(code, token=TOKEN):
    """拉单只沪深实时快照,返回 (data, err);err 非空表示失败。"""
    url = f"{BASE}/hs/real/ssjy/{code}"
    try:
        r = requests.get(url, params={"token": token}, timeout=10)
    except requests.RequestException as e:
        return None, f"网络异常:{e}"
    if r.status_code != 200:
        # 102/104 为智兔公开错误码契约
        return None, f"{r.status_code} {r.text.strip()[:120]}"
    try:
        return r.json(), None
    except ValueError:
        return None, f"非 JSON 返回:{r.text[:120]}"

def summarize(d):
    """从实时快照抽取关键字段,字段名不敏感,结构变了也不 KeyError。"""
    if not isinstance(d, dict):
        return None
    price = d.get("p") or d.get("price") or d.get("now")
    pct = d.get("zf") or d.get("zdf") or d.get("pct_change")
    name = d.get("name") or d.get("mc") or d.get("stock_name")
    if price is None and pct is None and name is None:
        return {k: d.get(k) for k in list(d)[:6]}   # 未知结构安全回退
    return {"name": name, "price": price, "pct": pct}

def selftest():
    fx = [
        {"p": 1700.0, "zf": 1.23, "name": "贵州茅台"},   # 常见字段名
        {"price": 12.5, "pct_change": -0.5, "stock_name": "平安银行"},  # 另一套字段名
        {"foo": "x", "bar": 1},                          # 未知结构
    ]
    for f in fx:
        assert summarize(f) is not None, "summarize 不应返回 None"
    print("selftest PASS: summarize 对常见/未知字段结构均安全抽取,无 KeyError")

def main():
    if TOKEN == "你的智兔token":
        print("[演示] TOKEN 为占位符,下面请求会返回 102 错误契约;请换成真实智兔 token。")
    for code in ["600519", "000001", "300750"]:
        d, err = fetch_realtime(code)
        if err:
            print(f"{code} 暂不可用: {err}")
        else:
            print(f"{code} -> {summarize(d)}")
        time.sleep(0.2)

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == "--selftest":
        selftest()
    else:
        main()

复制即跑:把 你的智兔token 换成真实证书,直接 python main.py;想先看解析逻辑不联网,跑 python main.py --selftest

二、常见坑

  • 返回 102 / 104 不是「收盘没数据」:占位 token 或证书权限不足会返回 102:Licence证书不存在104:缺少token参数。这是证书权限问题,不是交易时段问题。换覆盖该接口的正式智兔证书即可。
  • 字段名别写死:不同版本字段名可能是 p/pricezf/zdf,一律用 .get() 容错取值,接口结构微调也不崩。
  • 生产别裸奔:示例为可读性直接 requests.get,真实项目加超时 + 退避重试(Demo 源码可直接复用)。

小结与下篇预告

本篇你拿到了单只沪深实时行情。下一篇(#02)讲怎么先拉全市场股票清单 /hs/list/all,再批量轮询做自选股监控——批量访问正是需要更高配额证书的场景,按需升级即可。

免费领取证书

数据来自 智兔数服(www.zhituapi.com):零 SDK、纯 GET、免费版即可起步。

领取路径:进入 www.zhituapi.com → 点击「请求证书」→「证书获取」→「免费版」(邮箱验证 3 步即可拿到 token)。

把代码里的 你的智兔token 换成你拿到的真实 token,上面的示例就能直接拉到真实行情。

免责声明

本文仅演示智兔数服公开数据接口的用法,所有代码示例均以占位 token 自验,未含任何实时行情数据;不构成投资建议,亦不承诺收益。投资决策请基于你自己的判断与风险承受力。

想亲自试一下?免费获取证书