这几年我给不少教育类账号做过舆情和内容分析,有一个需求反反复复出现:把某个博主的公开微博全部抓下来,给每一条文本打个情绪标签,最后汇总出一个词云,看看这个人到底在聊什么、粉丝情绪是正向还是负向。这个需求听起来很常规,但真正动手做的时候,你会发现爬虫只是最轻松的一环,后面的文本清洗、情感模型选择、中文词云渲染,每一个步骤都是坑。今天我把这套完整的流程拆开讲一遍,从接口分析、数据采集到SnowNLP情感打分,再到jieba分词和wordcloud出图,所有代码和配置都会给到,踩过的坑也一并列出来。
这个项目适合刚学完Python基础、想找一个综合练习项目的读者,也适合已经在做爬虫但没接触过文本分析的从业者。它麻雀虽小但五脏俱全,覆盖了网络请求、数据解析、文本处理、机器学习模型调用和可视化展示,是一条非常完整的Python实战链路。
1. 这个项目到底值不值得做:目标拆解与预期收获
1.1 为什么选微博而不是其他平台
微博是目前中文互联网里最适合练手情感分析的公开数据源之一。它的文本长度适中,单条微博通常在几十到几百字之间,刚好是情感分析模型处理起来最舒服的长度范围;其次微博带有天然的社交属性,转发、评论、点赞这些元数据可以辅助判断一条内容的情绪强度;最重要的是,微博的手机版页面保留了非常干净的JSON数据接口,不需要像某些平台那样解析复杂的动态渲染页面,对爬虫学习者极度友好。
有人可能会问,为什么不去爬某书、某音?这些平台的反爬机制更强,接口返回的数据经过加密,很多还需要逆向破解,对新手来说学习曲线太陡。微博手机版接口中的containerid和page参数非常直白,返回的是标准JSON,你用requests就能直接解析出文本内容,这个渐进式的学习路径对建立信心很重要。
1.2 技术栈选型的底层逻辑
这个项目的技术栈由四部分组成:requests做页面请求、pandas做数据存储与管理、snownlp做中文情感分析、jieba+wordcloud做分词和词云渲染。
先说requests和Scrapy的选择。Scrapy是更专业的爬虫框架,自带并发调度和中间件机制,适合大规模分布式采集。但单就这个项目来说,微博单用户的历史微博最多几千条,用requests写一个带循环的脚本就能完成,没必要引入框架的复杂度。而且requests的代码逻辑更透明,每一步做了什么都在你眼前,排查问题也容易。
情感分析这块,很多人一上来就想上大模型,但这里有个成本问题:一条微博调用一次大模型接口,抓几千条就是几千次调用,费用先不说,光是API频率限制就够你排队等半天。我的建议是先拿SnowNLP做基线模型,跑通整个流程之后,再决定要不要对特定类别的文本做二次判断。SnowNLP的原理是基于朴素贝叶斯训练的 sentiment 模型,输入一段文本,输出一个0到1之间的情感倾向值,大于0.5偏向正面,小于0.5偏向负面。它虽然不如大模型聪明,但胜在免费、离线、速度快。
词云部分没有太多选择余地,Python生态里做中文词云基本就是wordcloud库,配合jieba分词。但这里藏着这个项目最大的坑:中文显示。后面我会详细说。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备是第一个坑:依赖版本与中文支持
2.1 安装清单与Python版本建议
先给一份完整的安装清单,我实测过Python 3.9到3.11都没问题,更低的版本建议先升级。
bash复制pip install requests pandas jieba snownlp wordcloud matplotlib pillow
这里重点说三个库的版本问题。第一个是wordcloud,1.8.1以后的版本在macOS和Linux上有预编译的wheel包,安装基本不会报错,但如果你用的是Python 3.12,早期版本可能找不到对应的wheel,会触发源码编译,然后大概率报gcc相关的错误。这时候不要硬刚编译环境,直接执行pip install --upgrade wordcloud,让它拉最新版本即可。
第二个是pillow,它是wordcloud处理遮罩图片的底层依赖,如果漏装,wordcloud在导入时报错会非常隐晦,报的却是ImportError: cannot import name 'Image' from 'PIL'这一类,容易把人带偏。
第三个是snownlp,它有个比较老的依赖问题,会在安装时一并装上scikit-learn等一堆库,耗时较长。装的时候耐心等即可,不要中途Ctrl+C,容易留下不完整的安装记录,后面import时报错又得排查半天。
2.2 中文字体是词云的第一道坎
我见过太多人跑通了所有代码,却在最后一步生成词云时得到一张全是方块的图。原因很简单:wordcloud默认字体是不支持中文的,你需要手动指定一个中文字体文件路径。
三个操作系统的常见字体路径我列在下面:
| 系统 | 常见中文字体路径 |
|---|---|
| Windows | C:/Windows/Fonts/simhei.ttf 或 msyh.ttc |
| macOS | /System/Library/Fonts/PingFang.ttc 或 /System/Library/Fonts/STHeiti Light.ttc |
| Linux | /usr/share/fonts/truetype/wqy/wqy-microhei.ttc(需安装文泉驿字体) |
如果你是Windows用户,建议优先用simhei.ttf(黑体),它在wordcloud里渲染出来的效果最均匀。macOS用户用PingFang.ttc效果好,但在部分wor
