跳到主内容

A股关注度指数数据集踩坑实录:我用双源交叉验证才把问题解决

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 单日样本的横截面统计,不构成任何投资建议。

相关阅读

分享到:

本文链接:https://www.biyeyuanma.cn/post/329.html

服务热线

加我微信

加我微信