2. 金融文本数据获取
在金融NLP项目中,数据获取是决定模型上限的第一道关口。与通用语料不同,金融文本具有强时效性、高噪声、多源异构和严格合规约束四大特征。本节将围绕数据来源、爬虫技术、API接口以及合规伦理四条主线,构建一套可落地的金融文本采集方案。
一、核心原理:金融文本的四大来源与采集逻辑
金融文本按获取方式可分为四类:公开结构化数据(如交易所公告、财报XBRL)、公开非结构化文本(新闻、研报、论坛帖子)、商业API数据(Wind、同花顺、Bloomberg)以及内部私有数据(客服对话、交易日志、尽调报告)。采集逻辑遵循“先API后爬虫、先公开后授权、先增量后全量”的原则,优先选择稳定、合规、可追溯的通道。
二、方法流程:从目标定义到数据落库
一个规范的金融文本采集流程包含六个步骤:目标定义 → 来源评估 → 通道选择 → 采集实现 → 清洗校验 → 合规审查。其中来源评估需重点考察数据覆盖度、更新频率、历史深度和授权成本。
- 目标定义:明确任务需要的是公告、新闻还是研报,确定时间窗口和标的范围。
- 来源评估:对候选源打分,优先选择有官方API或开放数据协议的来源。
- 通道选择:API优先,爬虫兜底;内部数据走数据仓库脱敏通道。
- 采集实现:编写采集脚本,设置限速、重试、断点续传和去重逻辑。
- 清洗校验:去除HTML标签、乱码、重复内容,校验字段完整性。
- 合规审查:核对robots.txt、版权声明、个人信息脱敏和授权范围。
三、爬虫技术与API接口实战
对于公开非结构化文本,爬虫是主要手段。以下是一个带限速和重试的财经新闻采集示例:
import requests, time, hashlib
from bs4 import BeautifulSoup
HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; FinNLP/1.0)"}
BASE = "https://example-finance-news.com/list?page={}"
def fetch_page(page, retry=3):
for i in range(retry):
try:
r = requests.get(BASE.format(page), headers=HEADERS, timeout=10)
r.raise_for_status()
return r.text
except Exception as e:
print(f"retry {i+1} page {page}: {e}")
time.sleep(2 ** i)
return None
def parse(html):
soup = BeautifulSoup(html, "html.parser")
items = []
for node in soup.select(".news-item"):
title = node.select_one("h3").get_text(strip=True)
url = node.select_one("a")["href"]
ts = node.select_one(".time").get_text(strip=True)
uid = hashlib.md5(url.encode()).hexdigest()
items.append({"uid": uid, "title": title, "url": url, "ts": ts})
return items
for p in range(1, 6):
html = fetch_page(p)
if html:
for item in parse(html):
print(item)
time.sleep(1.5) # 限速,尊重目标站点
对于商业API,以Tushare为例,需先注册获取,再按接口文档调用:
import tushare as ts
ts.set_("YOUR_")
pro = ts.pro_api()
df = pro.news(src="sina", start_date="20240101", end_date="20240131")
print(df[["datetime", "title", "content"]].head())
API接口通常有频率限制和字段权限,建议在配置文件中管理,并对返回结果做本地缓存,避免重复调用消耗配额。
四、数据合规与伦理注意事项
金融数据合规是项目生命线。以下清单可作为采集前的自查表:
| 合规维度 | 关键要求 | 常见风险 |
|---|---|---|
| robots.txt | 遵守目标站点爬取协议 | 绕过反爬、高频请求被封 |
| 版权与授权 | 确认文本可复制、可商用范围 | 研报、新闻转载侵权 |
| 个人信息保护 | 脱敏姓名、账号、联系方式 | 客服对话泄露用户隐私 |
| 数据授权范围 | 仅用于授权约定用途 | 超范围训练、二次分发 |
| 数据安全 | 加密存储、访问审计 | 明文存储、权限失控 |
严禁使用破解接口、伪造身份或绕过付费墙获取数据。金融领域监管严格,违规采集可能触发法律责任,项目应保留数据来源和授权凭证以备审计。
五、误区与复盘
误区一:只重数量不重质量。大量低质论坛文本会引入噪声,反而拉低模型效果。应优先保证来源权威性和文本干净度。
误区二:忽视时间戳和版本。金融文本时效性极强,缺少时间戳会导致训练集与预测集时间穿越,造成评估虚高。
误区三:先爬后补合规。合规应在采集前完成评估,事后补救成本极高,甚至需要删除全部数据重新采集。
复盘建议:建立数据采集日志,记录每次采集的来源、时间、数量、合规状态和负责人;对关键来源设置监控告警,一旦接口变更或反爬升级可快速响应。只有把数据获取做扎实,后续的清洗、标注和建模才有可靠基础。