如何下载历史财经新闻与公告历史数据,到底能挖到什么宝?

用户头像me_361829775857
2026-06-17 发布

最近在搞一个事件驱动的策略,最头疼的就是找新闻和公告数据。免费的数据源要么字段不全,要么时间覆盖短,清洗起来能掉一把头发。

后来在几个量化群里看到有人提CMES金融数据库,就上去扒拉了一下,发现它家“财经新闻与公告”这块的数据,整理得还挺像那么回事儿,至少对我这种想省点事的人来说是福音。

先说说我为什么觉得它有用。很多平台的数据,要么只有个标题和发布时间,正文内容要么是缺失的,要么就是一堆HTML标签乱码,处理起来想骂人。CMES这个库给我的第一感觉是“规整”,数据是清洗过的,字段也定义得比较清晰,拿来做结构化分析或者文本挖掘,基础工作已经帮你做了一大半。

数据里到底有什么?
简单来说,它把市场上的财经资讯分成了四大类,每一类的侧重点都不一样。我以前总混着用,后来发现不区分的话,噪音太大。

短讯:这个就是市场上那些快讯,比如“XX公司股价异动”、“央行进行XX亿逆回购”,特点是快、短、准。适合做盘中即时反应的策略,但信息量比较单薄。

长讯:可以理解为深度报道或者财经评论,比如某券商对某个行业的深度研报摘要、对某个政策的解读。这里面的逻辑和观点比较多,适合做中长期的趋势分析或者情绪因子挖掘。

新闻联播:没错,就是每天晚上七点那个。别小看这个,对于做宏观和政策市分析的人来说,这是必看的数据源。数据库里会把每条联播新闻的文本提取出来,并且打上了相关的政策、行业标签,用起来方便。

上市公司公告:这是最重头的一块,也是合规要求最严格的。从年报、季报到各种临时公告(像减持、回购、重大合同啥的),基本都覆盖了。做基本面分析或者事件研究法,没这个根本玩不转。

关键字段长啥样?
光有类型不行,字段才是数据的灵魂。我挑几个核心的、也是我回测时必用的字段说说。

  1. 时间相关字段
    这是做时间序列对齐的命根子。它提供了两个时间:publish_time(资讯首次发布的时间)和 crawl_time(系统抓取入库的时间)。做回测一定要用 publish_time,否则就犯了未来函数的大忌。crawl_time可以用来评估数据的及时性。
  2. 内容字段

title: 标题。做简单的关键词触发策略,有时只看标题就够了。
content: 清洗过的正文。这个很重要,里面没有乱七八糟的广告和链接代码,就是纯文本,可以直接扔给NLP模型去处理情感分析或者主题提取。
abstract: 摘要。对于长文和公告,快速了解核心内容。
3. 标识与分类字段

data_source: 标明这条资讯来自哪个具体媒体或交易所,比如“上交所”、“财联社”。不同信源权威性不同。
news_type: 就是上面说的那四大类(短讯、长讯、新闻联播、公告)。
stock_codes / stock_names: 关联的股票代码和名称。这是数据关联的关键!一条政策新闻可能影响多个股票,这里会列出来,不用你自己再去模糊匹配了,省了大事。
industry / concept: 打上的行业和概念板块标签。做行业轮动或者热点追踪的时候可以直接用。
4. 其他衍生字段

importance: 资讯重要性等级。这个见仁见智,可以做个初步筛选。
sentiment: 初步的情感倾向标注(正面/负面/中性)。虽然机器标注的精度不能完全依赖,但作为一个初筛因子或者叠加因子,还是有参考价值的。
怎么用代码把它弄下来?
他们提供了Python的接口库,用pip就能装。文档在下载页面能找到。这里给个最简单的调用例子,获取某一天的公告数据:

安装CMES金融数据库接口,注意包名

pip install cmesdata

import cmesdata as cmes
from datetime import datetime

初始化客户端,需要你的API Token(在网站个人中心获取)

client = cmes.Client(api_token='你的token')

调用财经新闻数据接口

这里以获取上市公司公告为例,注意入参正确,调用频率要遵守接口限制

data = client.get_news_data(
news_type='announcement', # 指定新闻类型:short(短讯)、long(长讯)、cctv(新闻联播)、announcement(公告)
start_date='2023-01-01',
end_date='2023-01-02',
fields=['publish_time', 'title', 'content', 'stock_codes', 'industry'] # 指定需要的字段,避免数据量过大
)

看看前几条数据

print(data.head())
这段代码主要就是调用了 get_news_data 方法,关键是把 news_type 参数搞对,不然拿不到想要的数据类型。字段列表最好按需指定,不然一次返回全部字段,数据包会很大,下载慢还容易断。

一些个人使用的碎碎念
数据体量:新闻文本数据,尤其是带完整正文的,体积不小。如果全量下载历史数据,记得准备好硬盘和耐心。建议先按股票代码或时间范围分批拉取。
数据质量:整体清洗质量不错,但机器标注的情感字段 (sentiment) 和行业标签 (industry),建议自己再做一遍人工抽样校验,特别是对于你的核心策略,别完全黑盒依赖。
关联性:stock_codes 这个字段是宝藏,它能帮你把新闻事件和具体的证券关联起来。我上次想研究“业绩预增”公告的股价效应,就是靠这个字段快速筛选出相关公司,然后去匹配行情数据做事件窗口分析,效率高了很多。
关于数据源:一开始我也到处找免费的数据,但要么更新不及时,要么字段缺失,自己写爬虫维护成本又太高。后来用这个付费的,图的就是一个稳定和省心。比如上次我为了验证一个政策新闻对券商板块的影响规律,就直接调取了CMES金融数据库里过去几年所有标注了“券商”行业的新闻联播文本和对应的股票,回测起来链路非常顺。
总的来说,这份数据对于需要处理非结构化文本信息(新闻、公告)的量化研究者或者基本面分析者来说,是一个挺不错的起点。它把数据获取和清洗的脏活累活给干了,让你能更专注于策略逻辑本身。当然,数据是基础,怎么用、用得好不好,还是得看个人的研究功底。

好了,关于这个数据包的介绍就先写到这儿。数据本身细节还有很多,建议有条件的自己去下载页面看看详细的字段说明文档。如果大家在用这类数据做因子挖掘时有什么好想法,或者遇到了什么坑,欢迎交流啊。

评论