第二章:金融文本数据采集

数据采集,说白了就是给模型找吃的。你模型再厉害,没有高质量的数据,那也是巧妇难为无米之炊。我个人习惯把金融文本数据分成三大类:新闻、财报、社交媒体。这三类数据各有各的脾气,采集方式也完全不同。

2.1 数据源全景:新闻、财报、社交媒体

先聊聊这三类数据的特点。我刚开始做金融NLP时,踩过不少坑,比如把财报公告当新闻处理,结果模型完全跑偏。

数据源 特点 更新频率 典型用途
新闻 时效性强,噪音大 分钟级 事件驱动、舆情监控
财报 结构化,信息密度高 季度/年度 基本面分析、财务预警
社交媒体 碎片化,情绪强烈 秒级 情绪指标、散户行为

嗯,这里要注意一点:新闻和社交媒体虽然都是文本,但处理逻辑完全不同。新闻相对客观,社交媒体则充满了情绪化表达。我在项目中遇到过把微博评论当新闻分析的情况,结果情绪得分高得离谱,后来才发现是用户吐槽。

2.2 API调用实战:Tushare与东方财富

API调用是数据采集最优雅的方式。我个人偏爱Tushare,它的数据质量在国内金融数据源里算是一流的。不过要注意,Tushare的积分制度有点坑,免费用户能拿到的数据有限。

先看一个Tushare获取新闻数据的例子:

import tushare as ts

# 设置token,建议用环境变量管理
ts.set_token('your_token_here')
pro = ts.pro_api()

# 获取个股新闻
df = pro.news(src='sina', 
              start_date='2024-01-01',
              end_date='2024-01-31',
              limit=100)
print(df.head())
我的经验: 调用API时一定要加异常处理。我曾经因为网络波动,脚本跑了一整夜,结果凌晨3点断连,数据全丢了。后来我习惯用try-except包裹,配合重试机制。

东方财富的接口更开放一些,但文档写得比较随意。我一般用它来抓取财报数据:

import akshare as ak

# 获取东方财富财报数据
financial_df = ak.stock_financial_report_sina(stock="600519",
                                              symbol="资产负债表")
print(financial_df.columns)

为什么会选择东方财富?说白了,它的数据更新速度比Tushare快,但数据清洗的工作量也更大。我建议新手先从Tushare入手,等熟悉了数据格式再切换到东方财富。

2.3 爬虫基础与合规性

API拿不到的数据怎么办?那就得上爬虫了。但这里我要强调一句:爬虫不是万能的,合规性永远是第一位的。

先看一个简单的新闻爬虫示例:

import requests
from bs4 import BeautifulSoup

url = "https://finance.sina.com.cn/stock/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 提取新闻标题
titles = soup.find_all('a', class_='title')
for title in titles[:5]:
    print(title.text.strip())
避坑指南: 我曾经因为爬虫频率太高,被对方服务器封了IP。后来我养成了两个习惯:一是加随机延时,二是用代理池。记住,爬虫不是DDOS攻击,别把人家服务器搞崩了。

合规性方面,我总结了三条铁律:

  • 遵守robots.txt: 爬虫前先检查网站的爬虫协议
  • 控制请求频率: 建议每秒不超过1次请求
  • 不爬取个人隐私数据: 金融数据可以爬,但用户个人信息别碰

你想想看,如果因为爬虫问题被起诉,那整个项目就白干了。我见过有人因为爬取内部数据被判刑的,所以合规性怎么强调都不过分。

2.4 本章知识体系

为了让你更直观地理解数据采集的整体流程,我画了一张图:

金融文本数据采集流程 新闻数据 财报数据 社交媒体 API调用 API + 爬虫 爬虫为主 数据清洗 → 格式统一 → 合规检查 结构化金融文本数据集

这张图展示了数据采集的完整链路:从三大数据源出发,通过API或爬虫获取原始数据,经过清洗和合规检查,最终形成可用的结构化数据集。

核心要点:
  • API优先,爬虫为辅
  • 合规性高于一切
  • 数据质量决定模型上限

好了,这一章的内容就到这里。数据采集是基础中的基础,但也是最容易出问题的环节。我建议你动手实践一下,用Tushare拉点数据试试,感受一下真实金融数据的味道。

专注资料整理