A股关注度指数数据集能自己攒,但别指望一个接口把活干完。我实测下来的结论是:人气榜只负责给你排名,名称、收盘价、涨跌幅、成交额、换手率全得去行情接口补,两边按股票代码左连接,最后还要把停牌那几条 0 值记录剔掉,不然你的均值会被拉出一截假信号。下面是我 2026-10-14 收盘后跑通的完整流程,代码和踩坑点都在里面。
准备:环境与前置条件
只用 Python 标准库,不需要装任何东西,也不需要申请密钥。三个前置条件说清楚:
一是网络。行情接口对请求头敏感,新浪必须带 Referer,hq.sinajs.cn 不带 Referer: https://finance.sina.com.cn 直接拿不到正文;腾讯 qt.gtimg.cn 返回的是 GBK,按 UTF-8 解会整段乱码。
二是口径。这里说的「关注度」用的是东方财富人气榜的排名,它是平台自己算的热度名次,不是成交量,也不是任何指数公司发布的官方指标。字段含义来自社区共识,平台没有公开承诺,正文里能引用,商业用途请走正规授权通道。
三是时点。人气榜盘中一直在动,收盘后取到的是当日终态。要做日频序列,就得每天固定一个时点采一次,今天 15:30 采、明天 20:00 采,两张表拼不起来。
步骤一:先把「关注度」拆成可采的字段
我原以为人气榜会直接给热度值,结果它只给排名,剩下全是 0 和变化量,所以字段要分两层设计:
| 字段 | 来源 | 含义 |
|---|---|---|
| sc | 人气榜 | 带市场前缀的股票代码,如 SH600693 |
| rk | 人气榜 | 当前人气排名 |
| rc / hisRc | 人气榜 | 较上一次 / 较历史的排名变化 |
| name / price | 行情接口 | 股票名称与最新价 |
| chg_pct | 行情接口 | 涨跌幅百分比 |
| amount_wan | 行情接口 | 成交额,单位是万元 |
| turnover | 行情接口 | 换手率百分比 |
| collect_date / source | 自建 | 采集日期与来源标记,缺了这列数据集等于没有保质期 |
缺了 collect_date,隔一周回看你就说不清它代表哪天。
步骤二:抓人气榜,拿到排名这一层
接口是 POST,地址 https://emappdata.eastmoney.com/stockrank/getAllCurrentList,正文是一段 JSON:
{
"appId": "appId01",
"globalId": "786e4c21-70dc-435a-93bb-38",
"marketType": "",
"pageNo": 1,
"pageSize": 100
} 第一个坑:pageSize 只能填 100。我图省事改成 200,接口不报错、状态码 200,data 直接是个空数组。改成 100 立刻回来 100 条。同样,pageNo=2 也是空的——也就是说一次请求最多就这 100 条,别写个 for 循环翻十页,白等。
实测 3 页请求耗时 5.21 秒,有用的只有第一页。返回的每条长这样:{"sc":"SH600693","rk":1,"rc":0,"hisRc":0}。就四个字段,干净,但没有名字、没有价格,看不出是谁。
步骤三:补行情,把排名变成能用的表
把 100 个 sc 拼成行情请求。我用腾讯的 qt.gtimg.cn/q=sh600693,sz002343,...,一次带 50 个代码,GBK 解码,按 ~ 切分。实测 100 条只要 1.11 秒,比一个个查快两个量级。
切完的数组下标要记牢:32 是涨跌幅、37 是成交额(万元)、38 是换手率。这三个位置我核过两遍,写错一位整列就废。sh/sz 前缀要小写。
拼完之后建议再拿新浪跑一遍现价做交叉验证。两源对不上,通常是抓到了停牌股或当天除权。
结果校验:三个必须过的检查
第一次拼完我就拿去算均值,结果明显不对,补了三道检查才算能发:
检查一,剔 0 值。新华传媒(600825)排在人气第 70 名,但换手率 0.00、成交额 0、收盘价字段也是 0;新浪那边同样全 0,行末标志位是 03。这是停牌股。它照样挂在人气榜上,你不做剔除,任何平均值都会被它拖下去一截。
检查二,别把人气榜当换手率榜。100 条样本算下来,排名与换手率的 Pearson 相关系数只有 -0.191,基本不相关。中国石油排第 87,换手率 0.11%,成交额却有 21.3 亿;贵州茅台排第 53,换手率 0.19%,成交额 30.5 亿。大市值股是靠成交额进榜的,小票才是靠换手。混在一起排名次,得出的结论是错的。
检查三,确认榜单的偏向性。这次 100 条里,涨 70 只、跌 28 只、平盘 2 只,涨跌幅绝对值达到 9.8%(涨跌停档)的有 43 只。头部 50 名涨跌幅均值 7.45%,51 到 100 名只有 0.88%。也就是说这个榜天生偏向异动股,用它反推「市场整体热度」会严重高估。
最反直觉的一条:人气榜第一名东百集团,当天是跌的,涨跌幅 -0.89%,而换手率 27.02% 是全场最高档之一。排名第一不等于涨得好,高关注配高换手,常常是分歧而不是共识。
数据出处与授权说明
本文只讲采集方法与字段口径,不做数据二次分发,也不提供打包下载。三个出处的性质要分清:
- 人气榜
emappdata.eastmoney.com:平台自有产品的数据接口,非官方开放 API,字段含义无公开承诺。 - 行情
qt.gtimg.cn与hq.sinajs.cn:同上,社区长期使用,但随时可能调整。 - 要做严肃研究或商业用途,请走交易所与行情商的正版授权通道。
采集频率请控制在合理范围内,别高频轮询;引用数值时一并带上采集日期。做 A 股关注度相关的长序列,我们站里那篇百度指数批量采集到 ECharts 全流程讲的思路可以直接平移过来,另一篇5514 只股票微信指数数据则说明了全市场量级下的字段设计怎么取舍。
常见问题
人气榜只能拿 100 条,我要全市场怎么办?
拿不到全量,这是接口本身的限制。想要全市场,就得换思路:自己按股票列表逐个查行情,用换手率或成交额构造代理指标,或者走带明确时间跨度的现成数据集。别试图靠翻页突破这个限制,实测翻页返回空。
Got 到的数据是 GBK 还是 UTF-8?
新浪和腾讯都是 GBK,用 decode('gbk', 'ignore')。按 UTF-8 解要么报错要么出乱码,而且乱码往往只在股票名称上体现,数字列看着正常,很容易被忽略,等到出图才发现名字全错了。
换手率和成交额,用哪个当关注度指标更靠谱?
看你的标的池。大市值股用成交额,小票用换手率。这次的实测数据已经说明了:0.11% 的换手率配上 21.3 亿成交额,用换手率排它一定垫底,用成交额它稳进前 100。混池比较时两个都要留,别只留一个。
停牌股该怎么处理?
识别出 0 值后直接剔除,并在日志里单独记一条,别静默丢掉。停牌本身有信息量(重大事项停牌常伴随后续异动),可以留一张副表做事件标记。
这套数据能当投资决策依据吗?
不能。它反映的是平台用户的关注热度,与股价没有因果关系,本文所有数字都是 2026-10-14 单日样本的横截面统计,不构成任何投资建议。

