如何使用Python做舆情分析

前言

互联网每天都产生海量文本:新闻资讯、公告、评论、社交媒体发言。舆情分析就是从这些非结构化文本里,自动提取观点、情绪、热点,判断公众对事件、产品、公司的态度。

Python凭借丰富的爬虫、文本处理、大模型/机器学习库,是做舆情分析最主流的工具。本文带你从原理、完整案例、落地坑点一次性讲清楚。

提示:本文代码仅用于技术学习;采集网络数据请遵守网站robots协议、相关法律法规,严禁违规爬取。

一、Python舆情分析整体流程

一套完整舆情系统,一共分为6步:

  1. 数据采集:抓取新闻、评论、公告等原始文本;
  2. 文本清洗:去除无用字符、表情、广告、换行,过滤无效内容;
  3. 文本预处理:中文分词、停用词过滤;
  4. AI语义分析:情感判断、关键词提取、主题归类、实体识别;
  5. 统计聚合:统计正面/负面占比、热度排行;
  6. 可视化输出:词云、趋势图,生成舆情简报。

二、核心依赖库介绍

  • 数据采集:requestsBeautifulSoup,用于网页文本抓取
  • 文本清洗分词:jieba中文分词、re正则表达式
  • 词云可视化:wordcloud
  • AI情感分析两种方案:
    1. 传统机器学习:snownlptextblob(轻量,无需调用API,精度一般)
    2. 大模型API:调用通义千问、文心一言等,语义理解更强,适合复杂长文本
  • 数据统计:pandas

三、案例1:轻量本地情感分析(SnowNLP,无需联网API)

适合简单短文本,例如评论、简短留言,开箱即用,不需要申请大模型密钥。

python 复制代码
import pandas as pd
from snownlp import SnowNLP

# 待分析评论数据
comments = [
    "这家公司产品质量很好,服务响应很快,非常满意",
    "售后处理太慢,出现问题一直没人解决,体验很差",
    "产品中规中矩,没有特别出彩的地方",
    "新品发布会内容一般,没有超出预期",
    "财报数据亮眼,市场普遍看好后续发展"
]

result_list = []
for text in comments:
    s = SnowNLP(text)
    # sentiment 0~1,越接近1代表越正面
    score = s.sentiments
    if score > 0.6:
        sentiment = "正面"
    elif score < 0.4:
        sentiment = "负面"
    else:
        sentiment = "中性"
    result_list.append({"text": text, "score": round(score,3), "sentiment": sentiment})

df = pd.DataFrame(result_list)
print(df)

✅优点:本地运行,速度快,不需要网络、API费用

❌缺点:中文语料偏口语,对财经、行业专业文本效果差,长文本容易判断错误

四、案例2:调用大模型API做专业舆情判断(推荐正式使用)

SnowNLP这类简易模型很难看懂行业新闻、公告。大模型能理解复杂长文,支持自定义输出格式,适合企业、财经类舆情。

python 复制代码
import requests
import json

def llm_sentiment_analysis(content: str, subject: str):
    api_key = "YOUR_API_KEY"
    url = "[https://xxx-api.com/v1/chat/completions](https://xxx-api.com/v1/chat/completions)"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    prompt = f"""
任务:舆情分析,分析下面文本对于【{subject}】的舆论倾向。
输出严格JSON,包含字段:
sentiment:正面/负面/中性
sentiment_score:-1到1之间,-1极度负面,1极度正面
key_words:提取3个核心关键词列表
summary:一句话简述舆情观点
文本内容:{content}
"""
    payload = {
        "model": "qwen-turbo",
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.1
    }
    resp = requests.post(url, headers=headers, json=payload)
    return resp.json()["choices"][0]["message"]["content"]


if __name__ == "__main__":
    news_text = "公司收到监管问询函,要求说明业务收入真实性,股价当日大幅下跌。"
    res = llm_sentiment_analysis(news_text, subject="该上市公司")
    print("舆情分析结果:\n", res)

五、案例3:生成词云,直观展示热点关键词

舆情分析做完,经常需要可视化,词云是最常用的展示方式。

python 复制代码
import jieba
from wordcloud import WordCloud

text = """公司营收增长 订单充足 利润下滑 监管问询 产品质量 研发投入 股价波动 市场预期"""
# 分词
words = jieba.lcut(text)
cut_text = " ".join(words)

wc = WordCloud(
    font_path="C:/Windows/Fonts/simhei.ttf", # 黑体字体,解决中文乱码
    background_color="white",
    width=800, height=400
).generate(cut_text)

# 保存图片
wc.to_file("wordcloud.png")
print("词云图片已生成 wordcloud.png")

六、进阶方案:批量采集+舆情聚合

实际项目中不会只分析单条文本,完整流程:

  1. requests批量抓取新闻列表,bs4解析正文;
  2. 清洗文本,过滤重复内容;
  3. 循环调用AI接口,批量打情感标签;
  4. pandas聚合统计:正面占比、负面占比,每日热度趋势;
  5. 存入SQLite/MySQL,定时每日自动跑任务;
  6. 生成每日舆情简报。

重点提醒:爬虫务必控制请求频率,加延时,禁止高频暴力请求,避免违反网站规则。

七、舆情分析常见坑

  1. 简易模型理解能力弱:SnowNLP只适合简单口语评论,专业财经、法律文本尽量使用大模型;
  2. 上下文缺失误判:单条新闻容易断章取义,需要结合多篇报道综合判断;
  3. 反讽识别困难:讽刺、阴阳怪气的文本,AI很容易识别错误;
  4. 数据噪音多:网页会夹杂广告、导航文字,不清洗会严重干扰分析结果;
  5. 大模型幻觉:关键词、摘要偶尔编造,重要舆情结论需要人工复核原文;
  6. 重复内容:同一条新闻多家媒体转载,统计热度时要做文本去重。

八、学习路线

  1. 入门:学会requests+BeautifulSoup简单抓取,jieba分词、词云;
  2. 初级:SnowNLP做简单评论情感打分,Pandas批量处理文本;
  3. 中级:调用大模型API,批量舆情打标,结构化输出JSON;
  4. 进阶:文本相似度去重、命名实体识别NER、时序热度统计;
  5. 工程化:定时任务自动采集,数据库存储,Streamlit搭建舆情看板。

小结

Python做舆情分析,核心就是机器负责批量处理海量文本,AI负责读懂情绪和观点 。轻量场景用本地小模型快速验证;正式业务场景优先大模型,语义理解更强。

舆情工具只能作为辅助,关键事件的结论不能完全交给AI,人工复核必不可少。

相关推荐
wangqiaowq1 小时前
AI Infra 全栈技术栈 二
人工智能
azhou的代码园1 小时前
景区游船预约服务系统
人工智能·spring boot·后端
进击的横打1 小时前
【人工智能】人与AI协作的四象限
人工智能
yyk333241 小时前
计算机视觉OpenCV中的FisherFace人脸识别
人工智能·opencv·计算机视觉
澳鹏Appen2 小时前
AppenTalk | 当AI推理不再只是模型的事:Dan Roth谈智能体的真正边界
人工智能·大语言模型·智能体·大模型推理
Mr数据杨2 小时前
二手车价格预测实战解析 从 Kaggle 回归赛题到可落地估价方案
人工智能·数据分析·kaggle竞赛
Zzj_tju2 小时前
Embodied Agent 小环境:用状态日志解释成功、绕路与超时
人工智能·深度学习·机器学习·自然语言处理
Ticnix2 小时前
MCP 工具拿不到 user_id?用 contextvars 做请求级用户隔离
python·agent·mcp
gb42152872 小时前
WPS 里的 Word快速合成照片
python