1. 获取股票新闻标题并计算情绪得分

获取股票新闻标题并计算情绪得分 学习卡片

任务目标

使用新闻API获取指定股票(以苹果公司 AAPL 为例)的最新新闻标题,调用预训练情感分析模型计算每条标题的情绪得分(范围 -1 到 1),并输出全部标题的平均情绪值,用于快速判断近期市场舆论倾向。

环境与依赖

需要 Python 3.8+,并安装以下库:

pip install requests transformers torch

新闻数据源使用 Alpha Vantage 的免费新闻API(需在 alphavantage.co 申请免费)。情感模型使用 Hugging Face 的 distilbert-base-uncased-finetuned-sst-2-english,该模型针对英文情感分类微调,输出正面/负面概率,本案例将其映射为 -1 到 1 的连续情绪分数。

完整实现代码

import requests
from transformers import pipeline

# ========== 配置 ==========
 = "YOUR_ALPHA_VANTAGE_"   # 替换为你的真实Key
SYMBOL = "AAPL"
NEWS_URL = "https://www.alphavantage.co/query"

# ========== 1. 获取新闻标题 ==========
params = {
    "function": "NEWS_SENTIMENT",
    "tickers": SYMBOL,
    "": ,
    "limit": 20          # 取最近20条新闻
}
resp = requests.get(NEWS_URL, params=params)
data = resp.json()

if "feed" not in data:
    raise RuntimeError(f"API请求失败: {data}")

titles = [item["title"] for item in data["feed"]]
print(f"获取到 {len(titles)} 条新闻标题\n")

# ========== 2. 加载情感分析模型 ==========
# 该pipeline自动下载并缓存模型(首次运行需联网)
sentiment_pipeline = pipeline(
    "sentiment-analysis",
    model="distilbert-base-uncased-finetuned-sst-2-english"
)

# ========== 3. 逐条计算情绪得分并汇总 ==========
def to_score(result):
    """将模型的 (label, score) 映射为 -1 到 1 的连续值"""
    label = result["label"]
    prob = result["score"]
    return prob if label == "POSITIVE" else -prob

scores = []
for title in titles:
    res = sentiment_pipeline(title)[0]
    score = to_score(res)
    scores.append(score)
    print(f"{score:+.3f}  | {title}")

# ========== 4. 输出平均情绪值 ==========
avg_score = sum(scores) / len(scores)
print(f"\n===== 平均情绪得分: {avg_score:+.3f} =====")
print("(范围 -1 到 1,正值为偏正面,负值为偏负面)")

运行方式

  1. 将代码中 替换为你自己的 Alpha Vantage Key。
  2. 保存为 stock_sentiment.py,在终端执行:
python stock_sentiment.py

验证方法与通过标准

  • API连通性验证:程序能打印出“获取到 N 条新闻标题”(N 为实际返回条数,通常为 20),说明网络与Key配置正确。
  • 模型推理验证:每条标题前出现带正负号的分数,且分数值在 0 到 1 之间。若某条标题明显为正面措辞(如“Apple beats earnings expectations”),其分数应为正值。
  • 结果合理性验证:最终输出的平均情绪值应落在 -1 到 1 区间内。若某日新闻整体偏正面,平均值应大于 0;若偏负面则小于 0。可多次运行观察不同日期的均值波动。
  • 异常排查:若 API 返回错误,程序会抛出 RuntimeError 并打印返回内容,此时检查 Key 是否有效或网络是否可达。

常见问题

  • 首次运行下载模型较慢:transformers 会自动下载约 250MB 的模型文件到本地缓存,需保持网络畅通,后续运行将直接使用缓存。
  • API 免费额度限制:Alpha Vantage 免费Key 每分钟最多 5 次请求,本程序单次运行仅请求 1 次,不会触发限制。
  • 英文标题为主:所选模型仅支持英文,若新闻标题为其他语言,情绪判断可能不准确。如需处理中文,可替换为 uer/roberta-base-finetuned-jd-binary-chinese 等中文情感模型。