> Source: https://ashareapi.com/docs/guides/longhubang-data/  ·  Markdown version for LLMs / AI agents

教程

# 用 Python 获取 A股龙虎榜数据：4 种方法对比
 四种做法：直接调 HTTP API、Tushare、AkShare、自己爬网页。推荐第一种 —— 它能一次拿到机构榜 / 游资榜 / 活跃席位三种分榜（其他途径通常只给混在一起的明细），下面给出可运行代码与各自「什么时候别用」。

## 方法一：直接调 HTTP API（推荐）
 龙虎榜是付费端点（Pro 档起）：带 Key 一次请求，返回统一信封 `{ ok, endpoint, tier, elapsed_ms, source, data }`。`type` 参数选榜单：`institution` 机构榜 / `hotmoney` 游资榜 / `activeseat` 活跃席位。
 返回里 `data` 是给人看的 Markdown 表，而 `structured` 是同一份数据但已结构化（对象数组）——程序里请用 `structured`，不必解析 Markdown。

 Python（可直接运行，需 Key）
```
import requests

KEY = "ct-你的Key" # 龙虎榜端点需要 Key（Pro 档起）
r = requests.get(
 "https://api.ashareapi.com/v1/lhb",
 headers={"Authorization": "Bearer " + KEY},
 params={"type": "institution"}, # institution 机构 / hotmoney 游资 / activeseat 活跃席位
 timeout=30,
)
body = r.json()
if not body.get("ok"):
 raise RuntimeError(body) # 上游失败返回 ok=false，且不扣调用次数

for row in body["structured"][:3]:
 net = float(row["netBuyAmt"]) # 字段值是字符串，算数前先转换
 print(row["name"], row["instBuyBranchCount"], "家机构",
 "净买", round(net / 1e8, 2), "亿")
```

-
 `structured[].code` 带市场前缀（如 `sz301234`）· `tdDays` = 上榜天数 · `instBuyBranchCount` = 买入机构家数

-
 `instBuyAmt` / `netBuyAmt` 单位是元（不是万元）· `instBuyRate` / `netBuyRate` 是百分数（`20` 即 20%）

-
 响应另带 `tables`（Markdown 表解析后的二维数组），与 `structured` 同源

## 三种分榜分别是什么
 实测一次（2026-09-23）：机构榜返回 34 只、活跃席位 161 个。机构榜第一是五洲医疗（4 家机构买入 1.35 亿、净买 3294 万）；活跃席位第一是「沪股通专用」，买入 3.45 亿。
 活跃席位的 `code` / `stockName` 都是分号分隔的多只股票且顺序一一对应，比如 `sh600127;sh600664;sh688105` 对应 `金健米业;哈药股份;诺唯赞` —— 用 `split(";")` 拆开即可。
 |
| | type | 榜单 | 关键字段 | 回答什么问题

| | institution | 机构榜 | instBuyBranchCount 机构家数 · instBuyAmt 机构买入 · netBuyAmt 净买额 | 今天哪些股票**被机构席位买入**

| | activeseat | 活跃席位 | name 席位名 · code 关联个股（分号分隔）· buyAmt 买入额 | 哪些**营业部/通道最活跃**（含沪股通、知名游资营业部）

| | hotmoney | 游资榜 | 当前上游无数据（见 FAQ，如实标注） | 游资动向 —— **目前拿不到**

 institution
 机构榜
 instBuyBranchCount 机构家数 · instBuyAmt 机构买入 · netBuyAmt 净买额
 今天哪些股票**被机构席位买入**

 activeseat
 活跃席位
 name 席位名 · code 关联个股（分号分隔）· buyAmt 买入额
 哪些**营业部/通道最活跃**（含沪股通、知名游资营业部）

 hotmoney
 游资榜
 当前上游无数据（见 FAQ，如实标注）
 游资动向 —— **目前拿不到**

## 方法二：Tushare（top_list / top_inst）
 Tushare 提供官方龙虎榜接口，数据质量稳定，但要**注册拿 token 并够积分**：每日明细 `top_list` 需 **2000 积分以上**，机构明细 `top_inst` 需 **5000 积分以上**（以 Tushare 官方文档为准）。
 它给的是**逐条明细**（某股票某席位买了多少），没有按机构/游资分好的榜单 —— 要分榜得自己在明细上聚合。

 对比：Tushare 的写法（示意）
```
# pip install tushare
import tushare as ts

pro = ts.pro_api("你的token")
df = pro.top_list(trade_date="20260923") # 龙虎榜每日明细（需 2000 积分以上）
print(df[["ts_code", "name", "net_amount", "reason"]].head())
```

-
 **什么时候别用**：只是想看「今天机构买了什么」—— 明细表还得自己聚合，直接用分榜更快

-
 **什么时候合适**：你已经在 Tushare 生态里做历史研究，需要把龙虎榜和财务、行情数据一起算

## 方法三：AkShare（stock_lhb_detail_em）
 AkShare 免 token、直接抓东财公开页面，龙虎榜入口是 `stock_lhb_detail_em(start_date, end_date)`，另有新浪系的每日详情、机构席位明细、营业部统计等接口。
 代价是**上游改版就会断**、需要你自己升级版本维护（这是它 issue 区的主要内容）。用于一次性研究没问题，做长期跑的任务就要有人盯着。

 对比：AkShare 的写法（示意）
```
# pip install akshare
import akshare as ak

df = ak.stock_lhb_detail_em(start_date="20260901", end_date="20260923")
print(df.head())
```

## 方法四：自己爬东财 / 交易所网页（不推荐）
 在没有 API 的时候才考虑。爬龙虎榜会同时踩三件事：页面结构随时变、反爬（限流 / 验证码 / 封 IP）、以及数据用途的合规判断落回你自己头上。
 交易所（上交所 / 深交所）的官方披露页是最权威的来源，但它是给人看的页面，不是给程序读的接口 —— 解析成本高、字段口径还要自己对齐。

## 四种方法怎么选
 |
| | 对比项 | 直接调 HTTP API | Tushare | AkShare | 自己爬网页

| | 上手成本 | **最低**：一个 GET 请求 | 注册 + 攒积分 | 装库即可 | 最高：解析 + 反爬

| | 要钱吗 | 付费端点（Pro 档起） | 积分门槛（2000 / 5000） | 免费 | 免费但费人

| | 分榜 | **机构 / 游资 / 活跃席位** | 只有明细，需自聚合 | 只有明细，需自聚合 | 看页面

| | 稳定性 | **多源自动切换 + 缓存** | 官方接口，稳定 | 上游改版会断 | 页面一改就断

| | 适合 | 按天看机构与席位动向 | 历史研究 + 多数据联合 | 一次性研究 | 无 API 的特殊数据

 上手成本
 **最低**：一个 GET 请求
 注册 + 攒积分
 装库即可
 最高：解析 + 反爬

 要钱吗
 付费端点（Pro 档起）
 积分门槛（2000 / 5000）
 免费
 免费但费人

 分榜
 **机构 / 游资 / 活跃席位**
 只有明细，需自聚合
 只有明细，需自聚合
 看页面

 稳定性
 **多源自动切换 + 缓存**
 官方接口，稳定
 上游改版会断
 页面一改就断

 适合
 按天看机构与席位动向
 历史研究 + 多数据联合
 一次性研究
 无 API 的特殊数据

## 几个容易踩的坑（实测）

-
 字段值都是**字符串**：`"135160431.2"` 要 `float()` 之后再算，直接相加会变成字符串拼接

-
 金额单位是**元**：五洲医疗 135160431.2 = 1.35 亿 —— 别当成万元再乘一次

-
 `instBuyRate` / `netBuyRate` 是**百分数**（20 = 20%），不是小数

-
 `code` 要带市场前缀（`sz301234` / `sh600664`）；活跃席位的 code 是分号分隔的多只股票

-
 `data` 是 Markdown 字符串、`structured` 才是数组 —— 程序化处理用后者

-
 游资榜（`hotmoney`）**当前上游无数据**，会返回「未找到市场数据」（实测 2026-09-17 至 09-22 都是如此）

## 常见错误与边界

-
 `401` = 没带 Key：龙虎榜是付费端点，匿名调用会被拒

-
 `429` = 超频：按你 Key 的档位限流，降频或升档即可

-
 `ok:false` = 上游取数失败：已自动换源，且不扣调用次数，重试一次通常就好

-
 更新节奏：**交易日盘后**更新（盘中没有当日龙虎榜，这是市场的披露节奏，不是接口延迟）

-
 `date` 参数可查历史（`YYYY-MM-DD`），留空 = 最近交易日；休市日不会变成「今天」

## 常见问题
 机构榜和游资榜有什么区别？
 机构榜（`institution`）统计的是**机构专用席位**的买入：机构家数、机构买入额、净买额 —— 用来判断「有没有机构资金进场」。游资榜（`hotmoney`）看的是**知名游资营业部**的动向。两者是不同口径，不能相互替代。

 游资榜（hotmoney）为什么返回「未找到市场数据」？
 这是如实说明：我们实测 2026-09-17 至 09-22 的游资榜都没有数据，上游该口径暂时拿不到。当前建议用**机构榜 + 活跃席位**：活跃席位里能看到沪股通专用和知名游资营业部（如开源证券西安西大街）的买入额与关联个股，能覆盖大部分「钱从哪来」的问题。我们会在上游恢复后自动接回，无需改代码。

 龙虎榜数据什么时候更新？
 **交易日盘后**。龙虎榜是交易所收盘后披露的，所以盘中查不到当天的（这不是接口延迟，是数据本身的产生时间）。`date` 字段/参数会告诉你数据属于哪一天。

 免费能调用吗？
 不能。龙虎榜属于付费端点（Pro 档起）；免费的是行情快照、K线、热搜、市场总览、涨跌分布这 5 个。如果你只想先验证接口形状，可以先看端点页上的返回示例。

 金额单位是元还是万元？换手率呢？
 金额字段（`instBuyAmt` / `netBuyAmt` / `totalBuyAmt` / `buyAmt`）单位都是**元**；比率字段（`instBuyRate` / `netBuyRate`）是**百分数**，`20` 表示 20%。所有数值在 JSON 里都是字符串，计算前请先 `float()`。

 最后更新: 2026-09-23
 代码与字段取自线上真实返回（2026-09-23 实测：机构榜 34 只 / 活跃席位 161 个 / 游资榜无数据）。Tushare 与 AkShare 的描述基于其官方文档（Tushare top_list doc_id=106、top_inst doc_id=107；AkShare stock_lhb_detail_em），接口与积分门槛以其官方为准。

 接着看

-
[端点清单（含龙虎榜分榜的参数与示例）](/endpoints)

-
[从 Tushare 迁移（接口对照 + 代码改写）](/docs/migrate-from-tushare)

-
[对比：我们与 Tushare](/compare/tushare)

-
[错误码对照](/docs/errors)

 [← 全部教程](/docs/guides)
