2. 金融新闻数据基础
做金融新闻主题聚类与热点发现,第一步不是调模型,而是把“数据底座”打牢。金融新闻具有时效强、来源杂、格式多、噪声大、合规要求高等特点。如果数据基础不牢,后续的向量化、聚类、热点打分都会失真。本节围绕五个核心问题展开:新闻从哪里来、以什么格式存在、有哪些关键字段、如何采集、以及采集过程中必须注意的合规边界。
一、核心原理:金融新闻数据的“三源四态”
金融新闻的来源可以归纳为“三源”:官方披露源(交易所公告、监管文件、上市公司公告)、专业媒体源(财经门户、通讯社、行业垂直媒体)、社交与聚合源(财经社区、自媒体、RSS聚合、搜索接口)。这三类源在权威性、时效性、结构化程度上差异明显。
数据在采集链路上会经历“四态”:原始态(HTML/PDF/图片)、解析态(正文、标题、时间抽取后的结构化记录)、清洗态(去重、去广告、去模板)、特征态(分词、实体、向量)。理解这四态,才能判断每个环节该用什么工具、该保留哪些字段。
二、常见字段与数据格式
无论来源如何,最终都应统一到一张“新闻主表”。核心字段包括:唯一标识(news_id)、标题(title)、正文(content)、发布时间(publish_time)、来源(source)、作者/机构(author)、URL、分类标签(category)、关联实体(股票代码、公司名、行业)、情感倾向(sentiment)、采集时间(crawl_time)。其中 publish_time 和 source 是聚类时区分“同一事件不同报道”的关键。
| 字段名 | 类型 | 说明 | 聚类中的用途 |
|---|---|---|---|
| news_id | string | 全局唯一ID | 去重、追踪 |
| title | string | 新闻标题 | 向量化主输入 |
| content | text | 正文全文 | 语义补充、实体抽取 |
| publish_time | datetime | 发布时间 | 时间窗口切分 |
| source | string | 媒体/机构名 | 来源权重、去重 |
| entities | list | 公司/股票/行业 | 主题标签、热点归因 |
| sentiment | float | 情感得分 | 热点强度辅助 |
数据格式上,常见有 JSON、CSV、XML、HTML 和 PDF。JSON 最适合接口与存储,CSV 适合批量分析,XML 多见于交易所公告,HTML/PDF 需要额外解析。建议统一落库为 JSON Lines 或 Parquet,便于后续批流处理。
三、采集方式与流程
采集方式主要有四类:API 接口(最稳定,如新闻聚合接口、交易所数据接口)、RSS 订阅(轻量、结构化好)、网页爬取(灵活但需处理反爬与解析)、文件/推送(公告 PDF、邮件、消息队列)。实际项目中通常组合使用。
一个可落地的采集流程如下:
- 确定源清单与优先级,标注权威性与更新频率。
- 按源选择采集器:API 用 requests,RSS 用 feedparser,网页用 scrapy/playwright。
- 统一解析为中间结构,抽取标题、正文、时间、来源。
- 写入原始层(raw),保留原始 HTML/JSON 以便回溯。
- 清洗去重后写入标准层(standard),供聚类使用。
# 示例:RSS 采集并统一字段
import feedparser, hashlib, json
from datetime import datetime
def fetch_rss(url, source_name):
feed = feedparser.parse(url)
records = []
for entry in feed.entries:
title = entry.get("title", "").strip()
content = entry.get("summary", "")
pub = entry.get("published", "")
news_id = hashlib.md5((title + pub).encode()).hexdigest()
records.append({
"news_id": news_id,
"title": title,
"content": content,
"publish_time": pub,
"source": source_name,
"crawl_time": datetime.now().isoformat()
})
return records
if __name__ == "__main__":
data = fetch_rss("https://example.com/finance/rss", "财经示例源")
with open("news_raw.jsonl", "a", encoding="utf-8") as f:
for r in data:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
四、合规注意事项与常见误区
金融新闻采集涉及版权、数据安全与监管要求,必须守住底线。核心合规点包括:遵守 robots.txt 与网站服务条款;不采集非公开或付费墙内内容;不绕过登录、验证码等访问控制;控制请求频率,避免对目标站点造成压力;对个人信息与敏感数据做脱敏;转载与二次分发需获得授权。用于内部研究、模型训练时,也应关注数据来源的授权范围。
复盘建议:建立“源—字段—合规”三张清单,每次新增来源时同步更新;对采集任务设置监控告警(成功率、延迟、字段缺失率);定期抽样人工校验解析质量。只有数据基础扎实,后续的主题聚类与热点发现才有可靠前提。