← 返回博客列表

【Python 量化取数指南 #02】免费股票数据 API 横向实测与选型

2026年09月18日 16:12 · 智兔数服 · Python 量化取数指南

摘要:【Python 量化取数指南 #02】免费股票数据 API 横向实测与选型 系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests 数据:由智兔数服提供。更多接口见 智

系列:《Python 量化取数指南》|连载项目 · 纯 GET 取数 · 仅依赖 requests
数据:由智兔数服提供。更多接口见 智兔数服技术博客

1. 你将得到什么

  • 一份「免费就能拉」的 A 股 / 指数 / 可转债取数清单(6 类端点)
  • 每个端点的完整可跑代码 + 返回字段说明
  • 一张「免费能拿 vs 要付费」的对照表,照着判断要不要升级证书

本篇是连载第 2 篇,所有示例都复用第 1 篇的 _get 封装,复制即可运行。数据来自 智兔数服

2. 本篇取数约定

  • 请求方式:GET https://api.zhituapi.com<path>?token=<你的智兔token>
  • 鉴权先于路由:返回 404 102:Licence证书(...)不存在 是 token 没填/填错,不代表路径错
  • 字段名不稳定:同一指标可能叫 close / 收盘价 / new,用 _hit_key 候选键兜住
  • 演示证书(免费版)即可起步;免费证书有调用频次与字段范围限制,生产前先小流量探一下

3. 核心模板(全系列复用)

import time, json, requests

BASE = "https://api.zhituapi.com"
TOKEN = "你的智兔token"      # 演示证书(免费版)即可起步,换成你申请的证书

def _get(path, params=None, timeout=15, retry=3, backoff=1.5):
    params = dict(params or {})
    params["token"] = TOKEN
    url = BASE + path
    last = None
    for i in range(retry):
        try:
            r = requests.get(url, params=params, timeout=timeout)
            if r.status_code != 200:
                last = f"HTTP {r.status_code} {r.text[:120]}"
                time.sleep(backoff * (i + 1)); continue
            try:
                return r.json(), None
            except ValueError:
                last = f"非JSON响应: {r.text[:120]}"
                return None, last
        except requests.RequestException as e:
            last = str(e); time.sleep(backoff * (i + 1))
    return None, last

def _hit_key(d, *keys, default=None):
    if not isinstance(d, dict):
        return default
    for k in keys:
        if k in d and d[k] not in (None, "", []):
            return d[k]
    return default

def _to_float(x, default=float("nan")):
    try:
        return float(x)
    except (TypeError, ValueError):
        return default

4. 跑通示例:6 个免费端点

下面 4 个端点演示证书通常就能拉(指数列表、市盈率、板块、可转债),演示如何取数与解析字段。

def demo_free_list():
    # 4.1 指数代码列表(沪深京指数)
    data, err = _get("/hz/list/hszs")
    if err:
        print("指数列表失败:", err); return
    items = data if isinstance(data, list) else data.get("data") or []
    for it in items[:5]:
        code = _hit_key(it, "code", "dm", "代码")
        name = _hit_key(it, "name", "mc", "名称")
        print(f"  指数 {code} {name}")

    # 4.2 全市场市盈率 /himk/syl
    data, err = _get("/himk/syl")
    if err:
        print("市盈率失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        if items:
            it = items[0]
            print("  市盈率样本:", _hit_key(it, "code", "dm"),
                  "PE:", _to_float(_hit_key(it, "pe", "syl", "市盈率")))

    # 4.3 行业板块列表 /hs/sectors/
    data, err = _get("/hs/sectors/")
    if err:
        print("板块失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        print(f"  板块数量: {len(items)}")

    # 4.4 可转债列表 /kzz/list
    data, err = _get("/kzz/list")
    if err:
        print("可转债失败:", err)
    else:
        items = data if isinstance(data, list) else (data.get("data") or [])
        print(f"  可转债数量: {len(items)}")

if __name__ == "__main__":
    demo_free_list()

返回字段说明(以指数列表为例):常见字段 code/dm(指数代码,如 000001.SH)、name/mc(名称)、zxj/zx(最新价)。不同端点字段名不完全一致,统一用 _hit_key 容错。

5. 坑与注意事项

  1. 演示证书字段更少:同一端点,免费证书可能只返回部分字段,付费证书才全。别一上来按文档全字段写解析。
  2. 返回可能是 list 也可能是 dict:先 print(type(data)) 看原始结构,再决定用 data[0] 还是 data.get(...)
  3. 别把 list 当 dict 取 .get:会抛 AttributeError,先判断 isinstance
  4. 频率限制:免费证书一般有每分钟/每日上限,循环拉多只股票时加 time.sleep(0.2~0.5)
  5. token 不要硬编码进版本库:用环境变量或配置文件,避免泄露。
  6. 复权/停牌留到后面专门篇:本篇只取「快照类」数据,历史 K 线与复权见第 5、14 篇。

6. 常见报错速查

报错 / 现象 原因 处理
404 102:Licence证书(...)不存在 token 没填/错 检查 TOKEN 是否被占位字符串覆盖
401 证书失效 重新申请/更换证书
429 触发限流 降低并发,加 sleep,调大 backoff
requests.exceptions.Timeout 网络慢 调大 timeout
返回 HTML 而非 JSON 路径错/被拦截 print(r.status_code, r.text[:200]) 看原始响应

7. 小结与下一篇预告

小结:你已能用一套 _get 拉通指数列表、市盈率、板块、可转债这 4 类免费数据;记住「先打原始结构、再用 _hit_key 容错」这个习惯,后面 14 篇都这么干。

下一篇计划写 #03《北向资金接口实测与数据解读》:在 _get 底座上,用真实接口拉沪股通/深股通资金流向与成交,并给出可跑示例与字段解析。

8. 免责声明

本文仅演示公开数据接口的用法,所有代码示例均为演示数据,不构成任何投资建议;实际返回字段以接口文档与你的证书权限为准。数据由 智兔数服 提供,更多接口示例见 技术博客


免费领取证书 / 查看完整接口文档,可前往 智兔数服官网

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