跳到主内容

财经公开数据源整理救不了你的报表?先把免费与付费的边界划清楚

财经公开数据源整理,真能帮你把数据采购的预算省下来吗?我的结论是能省,但前提是你得先把"不要钱"和"能商用"拆开看。上个月帮朋友做一份季度宏观底稿,我原本以为注册两个开放平台、调几个公开接口就能交差,结果光核对口径就返工了三遍,最后真正敢写进交付物的源只剩四个。下面是我实际拉过的数据和翻过的车。

起因:一份季度宏观底稿,卡在了数据源上

需求很朴素:一张表,放中国、美国、日本三家的 GDP、人均 GDP、CPI 年通胀,再加一列 A 股龙头的收盘价,季度更新。

这类需求我以前不是没做过。之前做城市购房关注度那次,我就踩过口径的坑——同一份百度指数数据,用全国口径和用地域口径算,2024 年成都能到北京地域口径的 65%,而 2016 年这个比例只有 35%。数字没变,结论能差出一倍。所以这次我一上来就定了条规矩:先确认口径,再谈接入。

过程:我把能白拿的源挨个拉了一遍

第一轮我选了三家:世界银行开放数据、新浪财经的行情接口、东方财富的行情接口。共同点是不要密钥,curl 一下就能看到东西。

世界银行这条最省心。请求地址是 https://api.worldbank.org/v2/country/{国家码}/indicator/{指标码}?format=json,官方文档明确写了 v2 版本不再需要 API key,v1 已经在 2020 年 6 月停掉。我拉中国 GDP(指标 NY.GDP.MKTP.CD)返回的最后更新时间是 2026-07-13,2025 年数值 19,498,039,388,042.6 美元,2024 年 18,729,668,435,848 美元,2023 年 18,270,356,654,533.2 美元。人均 GDP(NY.GDP.PCAP.CD)2025 年 13,861.97 美元,2024 年 13,293.12 美元。

看到 2023 年比 2022 年的 18,316,765,021,690.2 美元还低时,我愣了一下。这不是数据错了,是现价美元计价的名义 GDP 会被汇率拽着走——人民币兑美元贬值的年份,美元计价的 GDP 完全可能不涨反跌。要是直接拿这张表给客户讲"中国经济负增长",那是要出事的。这是我第一次返工的原因。

CPI 那列更微妙。指标 FP.CPI.TOTL.ZG 我拿到的中国 2025 年约 0.06,日本 2025 年是 3.17。我没敢直接抄,标了一句"世行口径,2026-07-13 更新,以官方最新公布为准"——世行指标每年 4 到 5 月做一次年度修订,现在拉到的和三个月后拉到的可能不是一个数。

行情这边,我在 2026-09-29 收盘后同时打了新浪和东方财富两个源。新浪 hq.sinajs.cn/list=sh600519(需要带 Referer 头)返回贵州茅台:今开 1244.60,昨收 1243.88,现价 1235.58,最高 1245.87,最低 1230.88,成交量 2,636,630 股,成交额约 32.6 亿元,时间戳 2026-09-29 15:34:59。东方财富 push2 接口返回 f43=123558,除以 100 也是 1235.58,f60=124388 对应昨收 1243.88,f170=-67 是涨跌幅 -0.67%。

两个源对上了,这才敢往表里填。

踩坑:三个当场翻车的地方

第一个坑是国家统计局。它的 easyquery 接口形式大概是 data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgyd&...。我用 curl 直接打,返回 403,页面底部写着 WAF 的 UrlACL 拦截。这个接口不是给裸脚本准备的,得带完整的浏览器请求头,或者走别人封装好的库。我在这上面耗了大半个下午,最后放弃硬啃。官方数据在权威性上最强,但"权威"和"好拿"从来不是一回事。

第二个坑是字段含义靠猜。东方财富那些 f43、f60、f169、f170 字段,没有任何官方公开文档,是社区一点点试出来的。价格要除以 100,涨跌幅要除以 100,不同接口的小数位还可能不一样。我第一版直接把 123558 当成股价填进表,被朋友一眼看出来"茅台一股十二万?"。这类接口的字段定义什么时候改,你不会收到任何通知,所以生产环境用它的风险得自己扛。

第三个坑是聚合值混在国家里。世界银行拉 country/all 时,返回里会夹着 WLD、ECS、EAP 这类区域与收入组聚合,跟国家行长得一模一样。不处理的话,"各国 GDP 排名"里会混进一个"世界"。

三次返工加起来浪费了大概两个工作日。

解法:按"能不能二次分发"划线,不按"要不要钱"

返工三次之后我换了套判断方法。以前我是按"免费 / 收费"分,现在按三个问题分:

  • 这个数据的授权条款写没写清楚?是世界银行那种明确 CC BY 4.0(可商用、要署名),还是只有一句"仅供参考"?
  • 我要把它放进卖给客户的东西里吗?如果只是内部研究,边界宽很多;要对外交付,授权不明确的源一律不用。
  • 它挂了,我有多久的缓冲?免费源没有 SLA,接口改版、加验证、下线都不会提前通知你。

拿这套去套,免费的边界一下就清楚了:世界银行是能放心用的那一档——免密钥、CC BY 4.0 需署名、覆盖 200 多个经济体,缺点是年度更新、低频、修订会改历史值。国内财经数据这块,自己攒下来的数据集反而是最稳的,因为口径是你自己定的。

至于 Tushare 这类平台,它的门槛不在钱而在积分:按官方的积分与频次对应表,120 积分只能调非复权日线,每分钟 50 次、每天 8000 次;到 2000 积分才有每分钟 200 次、单接口每天 10 万次,像 stock_basic 这类基础信息接口也是 2000 积分起;5000 积分往上每分钟 500 次、常规数据不限量。分钟线、新闻舆情这些不在积分体系里,得单独申请权限。所以"免费"的准确说法是"可以用贡献换额度",真到生产量级,要么签到攒积分,要么掏钱。

还有一条必须写在这儿:抓公开行情不等于可以随便抓。采集公开可见内容时,务必遵守目标平台的用户协议与 robots 约定,控制请求频率,不做登录态绕过,不触碰非公开接口——这条我在做舆情监测复盘时就已经吃过教训,财经数据同理。另外,这两家行情接口都不是官方对外承诺的公开 API,个人研究无妨,商业用途请走各自的官方数据服务渠道。

验证:拿两组数据交叉对一遍

我的做法很笨:同一个值两个源各取一次,对不上就不写进交付物。

茅台收盘价那次,新浪给 1235.58,东方财富折算后也是 1235.58,昨收两边都是 1243.88,一致。世行那边我把 GDP 总量除以人口数反推人均,跟 NY.GDP.PCAP.CD 直接给的值量级也对得上。

交叉验证的作用不是证明数据对,而是快速暴露"我理解错了字段"。只有一个源的时候,字段理解错了你会一直错下去,还错得很自信。

这批数据的出处与授权边界

本文出现的数字,出处与条件如下,都建议以官方最新公布为准:

  • 世界银行开放数据 API:api.worldbank.org/v2,官方文档见 datahelpdesk 的 Indicators API 说明页。免密钥,CC BY 4.0 授权,商用需署名。每年 4-5 月年度修订,历史值可能被改。本文引用的三项数据最后更新时间均为 2026-07-13。
  • 新浪财经行情接口:hq.sinajs.cn,需带 Referer 头,返回 GBK 文本。非官方承诺接口。
  • 东方财富行情接口:push2.eastmoney.com,返回 JSON,价格类字段需除以 100。同样非官方承诺接口,字段含义来自社区共识。
  • 国家统计局数据查询平台:data.stats.gov.cn,权威但直连易被 WAF 拦截,建议走浏览器或成熟封装库。
  • Tushare:tushare.pro,积分制,额度与积分档位挂钩,见官方《积分与频次权限对应表》。

本文不做任何数据的二次分发,只记录获取方法与实测值。

常见问题

Q1:财经公开数据源整理完,能直接拿去做量化回测吗?
能起步,但别指望精度。免费源普遍有修订历史值、字段无文档、低频更新这三个问题。回测对数据一致性要求极高,实践中一般先用免费源验证思路,确认有效后再换付费源重跑。

Q2:世界银行的 CPI 指标为什么有的国家返回空?
正常现象。世行的低收入国家和早年份缺失率很高,某些指标只有 100 多个国家有值。美国那条 CPI 在我这次的请求里就是 null。遇到 null 不要插值,换个指标或者换源。

Q4:为什么我拿到的 GDP 跟新闻里报的不一样?
先查计价方式。现价美元 GDP 受汇率影响很大,本币不变价 GDP 才反映实际产出。两者混用是宏观表里最常见的错误。

Q5:数据源整理到什么程度算够用?
每张表旁边都写三行字:出处、口径、最后更新时间。缺任何一行,三个月后你自己都认不出这个数是怎么来的。

相关阅读

分享到:

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

服务热线

加我微信

加我微信