用 Python 获取 A 股实时行情:3 种方法对比
三种做法:直接调 HTTP API、装现成数据 SDK、自己爬网页。推荐第一种 —— 不用注册、代码最短、拿到的是实时价;下面给出三种方法的可运行代码与取舍,并写明各自「什么时候别用」。
方法一:直接调 HTTP API(推荐)
免费端点无需 Key,一个 GET 请求就能拿到现价、开高低、成交量、成交额与换手率。返回是统一信封 `{ ok, endpoint, tier, elapsed_ms, source, data }`,`data` 是按日期倒序的数组,`data[0]` 就是最新一根(当日实时)行情。
代码只有几行(免费端点不需要任何鉴权头):
import requests
r = requests.get(
"https://api.ashareapi.com/v1/quote",
params={"code": "sh600667"}, # 市场前缀:sh 沪 / sz 深 / bj 北 / hk 港 / us 美
timeout=10,
)
body = r.json()
if not body.get("ok"):
raise RuntimeError(body) # 上游失败会返回 ok=false,且不扣调用次数
bar = body["data"][0] # 最新一根(当日)
print(bar["date"], bar["last"], bar["turnover"])- `last` = 最新价 · `open/high/low` = 开高低 · `turnover` = 换手率(%)
- `volume` 单位是手(×100 = 股)· `amount` 单位是元
- `date` 是数据日期 —— 休市日不会变成"今天",别把上一交易日的价当实时价
方法二:用现成的数据 SDK(Tushare / AkShare 这类)
如果你已经在用某个 SDK,不必急着换 —— 它的优势是函数多、字段全(分钟线、财报、新闻都在里面)。代价是另外两件事:
Tushare 需要注册拿 token + 管理积分,实时行情是单独收费的权限;AkShare 免 token,但它是抓公开网页的开源库,上游改版时接口会断,需要自己升级维护(这是它 issue 区的主要内容)。
# pip install akshare
import akshare as ak
df = ak.stock_zh_a_spot_em() # 全市场快照,自己筛代码
row = df[df["代码"] == "600667"]
print(row)- 什么时候别用 SDK:只要主流数据(行情/K线/资金/龙虎榜)且不想维护数据管道时 —— 直接调 API 更省事
- 什么时候必须用 SDK:需要分钟级数据或新闻/公告/研报全文 —— 我们不提供这些(边界写在下面 FAQ)
方法三:自己爬行情网页(不推荐,除非没有 API)
爬网页在"有 API 的时候"是三重亏:页面结构随时变(今天能跑明天断)、反爬会拦(限流/验证码/封 IP)、以及数据用途的合规判断落回你自己头上。
只有一种情况值得:你要的数据确实没有任何 API(冷门品种、历史快照之类)。即便如此也建议先找官方数据服务,别从页面开始。
三种方法怎么选
| 对比项 | 直接调 HTTP API | 数据 SDK(Tushare/AkShare) | 自己爬网页 |
|---|---|---|---|
| 上手成本 | 最低:一个 GET 请求 | 要装库 / 注册拿 token | 最高:解析页面 + 反爬对抗 |
| 实时行情 | 有(含在免费端点里) | Tushare 需单独权限;AkShare 可拿 | 能,但要自己维护 |
| 稳定性 | 多源自动切换 + 缓存 | 上游改版需自己升级 | 页面一改就断 |
| 要不要注册 | 不要(免费端点) | Tushare 要;AkShare 不要 | 不要 |
| 分钟级数据 | ❌ 不提供 | ✅ 有 | 看页面 |
| 适合场景 | 行情 / K线 / 资金 / 龙虎榜 / 板块 / 财务 | 分钟级、财报明细、新闻研报 | 有特殊数据且无 API |
常见错误与处理
- `429` = 超频:匿名 5 次/分;解一次 PoW 挑战(`GET /v1/challenge`)可提到 60 次/分;付费 Key 按档位(体验版 1 万次起)
- `401` = 调了付费端点但没带 Key(行情快照/K线/热搜/市场总览/涨跌分布 这 5 个不用 Key)
- 代码必须带市场前缀:`sh600667` / `sz000001` / `bj830799` / `hk00700` / `usAAPL`;只给 6 位数字会取不到
- `ok:false` = 上游取数失败:已自动换源,且不扣调用次数,重试一次通常就好
- 休市日与盘中:`date` 字段会告诉你数据是哪一天的(判断逻辑别依赖"今天")
常见问题
能。行情快照 / K线 / 热搜 / 市场总览 / 涨跌分布 这 5 个数据端点无需 Key:匿名 5 次/分,解一次 PoW 挑战后 60 次/分。正常用途不会被封;短时间大量请求会被限流(HTTP 429),这不是封禁,降频或解挑战即可。
看盘的脚本、小看板、收盘后跑一遍自选股都够(匿名 5 次/分、解挑战 60 次/分)。要跑全市场扫描或高频轮询,买断档更合适:体验版 ¥9.9 / 1 万次,标准版 ¥29.9 / 10 万次,专业版 ¥99 / 50 万次,不限量 ¥199/月。
数据来自多个公开数据通道,同一字段会交叉校验并自动切换。对不上时常见两种原因:① 复权口径 —— 我们返回的是前复权价(除权除息日不跳空),若对方用不复权,差异会精确出现在跨除息日的窗口上;② 时间点不同(盘中快照 vs 收盘价)。用 amount / volume 交叉验证最可靠。
不提供。我们做的是日/周/月 K 线与实时快照,没有分钟线(历史分钟与实时分钟都没有)。需要分钟级请用专门的 SDK 或数据商 —— 这是我们的边界,明写在这里免得你白试。
可以。`code` 带前缀即可:`hk00700`(港股)、`usAAPL`(美股);行情快照与 K 线都支持。可转债用 `sh113052` / `sz123138` 这种形式。
最后更新: 2026-09-21
代码与字段取自线上真实返回(2026-09-21 实测)。限流与错误码见「错误码」页;额度与价格见「定价」页。第三方 SDK 的描述基于其官方文档,以其官方为准。