近几年,财经信息传播速度呈爆炸式增长,很多投资者、分析师、研究员都发现一个问题——真正有用的资讯,总是比人手更快一步。尤其是在突发事件频出的行情波动中,信息滞后甚至会成为潜在风险。
本文记录的是一次“自动化处理财经资讯文本”的实践,从网页数据提取、板块归类、文本情绪评估,到最终整理为结构化表格,形成一套基础性的预警机制工具。
一、问题起点:为什么要搭建这类信息分析方案?
手动阅读资讯早已无法满足实时决策场景,例如:
- 一条政策新闻刚发布,市场几秒内就出现波动;
- 板块联动强,事件一旦影响某类资产,相关主题同步反应;
- 人力处理不具备规模性,尤其面对多渠道、多个页面的碎片内容。
因此,目标是:模拟信息处理者的日常行为,提取网页内容,进行文本分析,并按照内容倾向进行归档,以此完成结构化分析输入。
二、环境准备(工具 & 库)
基础环境
- Python 3.9 或以上
依赖组件安装
pip install requests beautifulsoup4 fake_useragent pandas openpyxl
pip install snownlp
说明:
本文使用的是 SnowNLP 作为中文文本的情绪倾向评估工具,同时结合 UA 模拟与 Cookie 持久参数应对目标站点内容加载策略。
三、步骤详解
步骤一:配置请求参数(模拟浏览器行为)
#爬虫代理设置(参考亿牛云代理 www.16yun.cn)
proxy_host = "proxy.16yun.cn"
proxy_port = "3100"
proxy_user = "16YUN"
proxy_pass = "16IP"
proxies = {
"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
"https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}
构造访问头信息:
from fake_useragent import UserAgent
headers = {
"User-Agent": UserAgent().random,
"Cookie": "你的cookie字符串"
}
步骤二:提取资讯标题、链接与摘要
import requests
from bs4 import BeautifulSoup
url = "https://wallstreetcn.com/news/global"
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.select('div.article-item__content')
news_data = []
for article in articles:
title = article.select_one('h4').get_text(strip=True)
link = "https://wallstreetcn.com" + article.select_one('a')['href']
summary = article.select_one('p').get_text(strip=True)
news_data.append({
"标题": title,
"链接": link,
"摘要": summary
})
步骤三:文本情绪判断
from snownlp import SnowNLP
for item in news_data:
s = SnowNLP(item["摘要"])
item["情感得分"] = round(s.sentiments, 3)
步骤四:关键词分类映射
板块关键词 = {
"美联储": "宏观",
"美元": "汇率",
"黄金": "商品",
"特斯拉": "美股",
"A股": "A股",
"人民币": "货币"
}
def 分板块(summary):
for keyword, section in 板块关键词.items():
if keyword in summary:
return section
return "未分类"
for item in news_data:
item["所属板块"] = 分板块(item["摘要"])
四、整合后的示例脚本
import requests
from bs4 import BeautifulSoup
from snownlp import SnowNLP
from fake_useragent import UserAgent
import pandas as pd
# 模拟访问接口配置 参考亿牛云代理 www.16yun.cn)
proxy_host = "proxy.16yun.cn"
proxy_port = "3100"
proxy_user = "16YUN"
proxy_pass = "16IP"
proxies = {
"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
"https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}
headers = {
"User-Agent": UserAgent().random,
"Cookie": "你的cookie字符串"
}
# 网页请求与结构分析
url = "https://wallstreetcn.com/news/global"
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.select('div.article-item__content')
news_data = []
for article in articles:
title = article.select_one('h4').get_text(strip=True)
link = "https://wallstreetcn.com" + article.select_one('a')['href']
summary = article.select_one('p').get_text(strip=True)
sentiment = round(SnowNLP(summary).sentiments, 3)
news_data.append({
"标题": title,
"链接": link,
"摘要": summary,
"情感得分": sentiment
})
板块关键词 = {
"美联储": "宏观",
"美元": "汇率",
"黄金": "商品",
"特斯拉": "美股",
"A股": "A股",
"人民币": "货币"
}
def 分板块(summary):
for keyword, section in 板块关键词.items():
if keyword in summary:
return section
return "未分类"
for item in news_data:
item["所属板块"] = 分板块(item["摘要"])
# 存档为表格
df = pd.DataFrame(news_data)
df.to_excel("news_sentiment_classified.xlsx", index=False)
五、常见问题整理
| 问题 | 说明 | 处理建议 |
|---|---|---|
| 无法获取页面内容 | 访问行为受限 | 检查代理接口是否可用,cookie 是否更新 |
| 情绪分数接近0.5 | 句子结构过短或无明显倾向 | 可联合标题与摘要做分析 |
| 分类结果为“未分类”较多 | 关键词不够丰富 | 可根据实际扩展关键词表 |
六、小结与建议方向
通过本次实践,我们完成了一个基本的财经资讯文本处理框架,具备自动分拣、情绪预警的初步能力。