20252217贾子墨 实验四《Python程序设计》实验报告
20252217 2025-2026-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2522
姓名: 贾子墨
学号: 20252217
实验教师:王志强
实验日期:2026年5月18日
必修/选修: 公选课
1.实验要求
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
评分标准:
(1)程序能运行,功能丰富(至少5个功能)。(需求提交源代码,并建议录制程序运行的视频)15分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。10分
2 实验选题:基于python的新浪新闻舆情分析
2.1 选题调研:微博舆情分析系统技术综述
2.1.1 技术背景
微博作为国内主流社交媒体平台,日活跃用户数亿,评论数据中蕴含着公众对热点事件的情感倾向和观点分布。传统人工监测方式效率低下、覆盖面窄,而基于Python的爬虫技术、自然语言处理与可视化技术,为舆情分析提供了高效、自动化的解决方案。本实验旨在构建一套完整的微博舆情分析系统,实现从数据采集到可视化展示的全流程自动化。
随着互联网的深度普及,网络舆情已经成为社会舆论的重要组成部分。微博凭借其开放性、实时性和互动性,成为热点事件发酵和传播的核心阵地。一条热门微博往往能在数小时内产生数万条评论,这些非结构化的文本数据中隐藏着公众的真实情绪和态度走向。对于政府机构、企业和媒体而言,及时准确地把握微博舆情动向,具有重要的决策参考价值。然而,面对海量的评论数据,传统的人工逐条阅读和分析方式已经完全无法满足实时性和全面性的需求。因此,利用Python编程技术实现自动化舆情分析,不仅具有技术实践意义,更具有现实应用价值。
近年来,自然语言处理(NLP)技术的快速发展为中文文本的情感分析提供了坚实的基础。从早期的基于词典的情感判断方法,到如今基于机器学习和深度学习的情感分类模型,中文情感分析的准确率不断提升。同时,Python生态系统中涌现出大量优秀的开源工具库,如jieba分词、SnowNLP情感分析、WordCloud词云生成等,使得开发者能够以较低的技术门槛快速构建舆情分析系统。微博官方也提供了相对规范的评论数据接口,为合规的数据采集提供了便利条件。
2.1.2 核心技术选型调研
微博评论数据的获取是整个系统的入口环节,数据采集的稳定性和效率直接决定了后续分析的可行性。调研过程中,综合考察后选择了以下方案:
技术方向 选型方案 调研理由
数据采集 Requests+API解析 微博评论接口返回JSON数据,解析简单高效,配合Cookie伪装可突破反爬
情感分析 SnowNLP 基于朴素贝叶斯的中文情感分析库,开箱即用,适合快速开发
中文分词 jieba 开源中文分词库,算法成熟,支持自定义词典和多种分词模式
数据可视化 Matplotlib+WordCloud Matplotlib基础绘图功能完善,WordCloud将词频转换为直观图形(词云)
Web框架 Flask 轻量化、易部署,适合中小型项目的快速搭建
云部署 华为云ECS 支持公网访问,安全组配置灵活,适合项目展示
2.1.3 同类项目参考
在确定技术方案的过程中,广泛参考了业界已有的类似项目和成功案例,以验证技术路线的可行性并汲取实践经验。
(一)CSDN案例
CSDN的技术博客中,刊载了多篇基于SnowNLP和jieba进行中文舆情分析的实践案例。其中一篇《基于SnowNLP的微博评论数据情感分析》详细介绍了从数据采集到情感评分再到可视化的完整流程,验证了SnowNLP在微博评论场景下的有效性。该案例指出,SnowNLP在处理正面和负面评价明显的评论时准确率可达80%以上,对于中性或隐晦表达的评论则存在一定误差,但整体满足舆情分析的基本需求。这一评估结果为本项目的预期效果提供了参考基准。

(二)词云图生成教程
CSDN提供了一篇名为《Python生成词云图的完整指南》的技术文章,从词云库安装、中文分词、停用词过滤到自定义蒙版形状和颜色方案,进行了系统性的讲解。该教程特别强调了中文字体配置的重要性——Linux服务器上默认不安装中文字体,需要手动安装(如文泉驿微米黑)并在代码中显式指定字体路径,否则词云图中中文会显示为方块。这一经验教训在后续部署阶段得到了验证,避免了大量排查时间。

(三)高校课程项目参考
通过学术搜索引擎检索发现,北京邮电大学、华中科技大学等多所高校已在相关课程中设置新闻抓取与舆情分析项目。这些课程项目普遍采用"爬虫 + 分词 + 情感分析 + 可视化"的四阶段流水线架构,与本项目的设计思路高度一致。部分项目还引入了基于LDA的主题模型,用于识别评论中讨论的主要话题。虽然本实验未纳入主题建模功能,但这些进阶方案为后续的功能扩展提供了参考方向。

(四)GitHub开源项目参考
GitHub上存在多个基于Flask的舆情分析开源项目,如"Weibo-Analyst"和"Weibo-Sentiment-Vis"等。这些项目在代码组织、模块划分、前端设计等方面提供了有价值的参考。特别是其中一个项目采用了"utils-crawler-sentiment-visualizer-app"的五模块架构,模块职责清晰,耦合度低,本项目直接借鉴了这一设计模式。

2.1.4 调研结论
经综合调研,Requests + SnowNLP + jieba + Flask 的技术栈能够满足微博舆情分析的核心需求。各库均有成熟的官方文档和活跃的社区支持,技术门槛适中、开发效率高,适合作为公选课综合实验项目完成开发与部署。
2.2 开发环境
本地配置
操作系统:Windows 11
开发语言:Python 3.13
集成开发环境:PyCharm 4.2
使用的库:requests, beautifulsoup4, pandas, snownlp, matplotlib, wordcloud, jieba, openpyxl
云服务器配置
操作系统:Ubuntu 22.04
编程语言:Python 3.13
编译器:Python 3.13
CPU:2核
内存:4GB
公网IP:1.94.206.129
2.3 实现功能
1.输入微博URL,自动爬取博文下的评论数据
2.情感词云分析
3.可视化分析
4.Web界面展示
5.华为云平台托管
2.4 实验过程及结果
技术选用
后端框架:本来想选用Django,但由于Flask轻量化,更易布署,web开发便采用flask框架设计。
爬虫:采用Requests,微博评论API可获取JSON数据,解析简单。
情感分析:调用SnowNLP这一python库,经浏览器搜索它能够自动判断一段中文文字是积极的、消极的还是中性的。
中文分词:选用jieba库(能把像"我爱Python"这样没有空格分隔的连续中文句子,切分成'我', '爱', 'Python'这样有意义的独立词语。)
可视化:采用Matplotlib + WordCloud,WordCloud负责将文本数据变成由词语大小代表频率的图片,而Matplotlib则负责把这个图片展示出来。
前端:采取HTML5 + CSS3现代网页技术,响应式设计。
部署:通过华为云服务器实现公网访问。
模块设计
本系统共分为5个核心模块:
utils.py 工具模块 数据清洗、文件保存、目录创建
crawler.py 爬虫模块 新浪新闻评论爬取
sentiment.py 情感分析模块 SnowNLP情感评分和分类
visualizer.py 可视化模块 词云图、饼图、柱状图生成
app.py Web主程序 Flask路由、整合各模块、提供API
2.4.1 创建文件
在桌面上创建weibo_sentiment文件夹并在其中创建以下文件:
app.py 主程序
weibo.py 爬虫模块
sentiment.py 情感分析
visualizer.py 可视化
utils.py 工具函数
requirements.txt 依赖列表
以上代码均已上传到我的gitee仓库
文件夹截图:

2.4.2 安装依赖库
按win+R,输入 cmd打开命令行,然后输入 cd 桌面\weibo_sentiment执行安装命令pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2.4.3 获取微博cookie
微博有反爬虫,如果没有User-Agent头,请求会被拒绝,要先获取cookie才能爬取数据。
过程:登录微博后,按键盘上的F12键或者右键网页点击检查,点击顶部菜单的Network标签,按F5刷新页面,在左边列表中找到任意一个请求(比如 weibo.com),点击它并在右侧找到Request Headers(请求头),找到“Cookie:”这一行,复制等号后面的全部内容。

2.4.4 运行程序及结果
(1).将第三步获取的cookie填入到weibo.py的cookie中

(2).然后在命令行中运行python app.py

(3).配置app.py的编辑器

(4).打开浏览器,输入给出的网址http://127.0.0.1:5000进入网页

(5).开始测试爬取功能:
打开微博网页版 https://weibo.com
随便找一条博文(尽量找评论多的方便后续生成词云和可视化图表)
示例:选取央视网一条博文

点击博文发布时间,进入博文详情页
复制浏览器地址栏的URL,粘贴到爬虫网站上,点击开始分析并得出结果

2.4.5 在华为云服务器中部署系统
(1).购买ECS服务器,配置安全组开放5000端口

找到服务器,点击名称进入详情,随后
找到安全组标签并点击安全组名称,点击入方向规则 → 添加规则,将5000端口添加上去。

(2).SSH连接服务器,安装Python3和pip
打开命令行输入ssh root@1.94.206.129并输入密码连接服务器

先输入apt update && apt upgrade -y更新系统
然后输入apt install -y python3 python3-pip安装python,安装完成后输python3 --version验证安装

然后分别安装图形库依赖和中文字体
apt install -y libgl1-mesa-glx
apt install -y fonts-wqy-microhei
安装完成截图


(3).上传项目代码,安装依赖库
由于终端编码问题,rz命令上传文件时出现乱码,因此我选择直接在服务器上创建文件,然后粘贴代码。
手动创建文件夹后输入ls和ls templates/查看目录所有文件显示创建成功

输入pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple安装依赖

(4).配置微博Cookie
先按照之前本地部署的方法在电脑的浏览器中获取新浪微博的Cookie
然后返回命令行,输入vi weibo.py修改服务器上的weibo.py
具体操作:
按 i 进入编辑模式,找到 'Cookie': '你的微博Cookie' 这一行,替换成你的Cookie
按 Esc,输入 :wq 回车保存

(5).运行Flask应用
在命令行中输入python3 app.py运行程序

(6).浏览器访问测试
然后用浏览器打开我的公网ip:http://1.94.206.129:5000

接着找一篇博文(以人民网一条博文为例):

按之前本地部署的方法复制浏览器地址栏的URL,粘贴到爬虫网站上,点击开始分析并得出结果

2.4.6 舆情分析系统运行视频
2.5 遇到的问题及解决方法
1.分析失败:无法提取微博ID
解决方法:这是因为输入的URL格式不对,程序无法从URL中提取微博ID。要点进这条博文,跳转到独立页面后,浏览器地址栏的URL才是正确的格式
2.分析失败:爬取失败,请检查Cookie
解决方法:这是因为Cookie过期已被清除,需要重新发送request获取cookie
3.命令行运行程序时出现418 I'm a teapot
解决方法:这是因为行为被反爬识别,应该增加headers、降低频率避免被警告
4.中文字体导致图表显示方块

解决方法:因为之前已经安装过中文字体,所以出现这个问题因为中文字体没有正确生效。这时候应该修改 visualizer.py 的字体设置,并修改词云和饼图的字体调用路径,重启程序后再次输入URL后得到了正确的UI界面。
3.实验感悟
3.1 技术方面的收获
- 爬虫技术有了更深的理解
通过这次实验,我真正理解了爬虫的工作原理。微博有很强的反爬机制,不是简单发个请求就能拿到数据的。需要配置User-Agent伪装浏览器,需要Cookie来维持登录状态,还需要控制请求频率避免被封。 - 学会了如何分析和解决反爬问题
在实验过程中,我多次遇到"爬取失败"的错误。最开始以为是代码写错了,后来才意识到是Cookie失效或请求头不完整。通过询问AI和反复尝试,我学会了如何从浏览器获取完整的Cookie,如何配置请求头让服务器认为是真实用户,如何通过延时降低被封的风险。 - 模块化编程的重要性
项目被拆分成多个模块:爬虫、情感分析、可视化、Web服务。这样代码结构清晰,容易理解,并且修改某一个模块不影响其他模块,方便调试和测试。
3.2 实践方面的收获
- 调试能力提升了
实验中遇到了各种各样的问题:依赖库安装失败、Cookie配置错误、URL格式不对、matplotlib中文显示方块等。通过查阅错误信息、搜索报错对应的解决方案和反复试验,我积累了如何定向的查找和解决问题的经验。 - 学会了完整的项目流程
从设计模块、学习算法到部署上线,我参与整个项目开发流程,这也让我对软件开发有了更全面的认识。
3.学习部署云服务器
本次实验我还将项目部署到了华为云服务器上,实现了公网访问。
在这个过程中我学到了部署服务器的基本流程
(1).如何选购服务器、选择ECS配置(操作系统、CPU、内存、宽带等)
(2).使用SSH命令远程连接服务器,管理远程主机
(3).在Linux上用命令行配置环境,安装Python3、pip、中文字体、图形库依赖
(4).使用scp命令或WinSCP将本地代码上传到服务器
(5).在华为云安全组中配置并开放5000端口,允许公网访问
(6).使用nohup让Flask应用在后台能够持续运行,不会因关闭终端而停止
(7).怎样维护服务器,遇到中文乱码、端口占用、依赖缺失等问题的应怎么检查解决
最终,我的项目可以通过公网IP访问: http://1.94.206.129:5000
4.Python课程总结与感想
4.1 课程总结
初始python
python概述:python是一种跨平台、解释型(无需编译)、面向对象(蛋炒饭和盖浇饭)、动态数据类型的高级语言(更接近自然语言)
python地位:2020年tiboe排名第三,仅次于Java与C语言
python开发环境:IDLE、Pycharm等第三方工具
基本语法:
动态类型变量(不用提前规定变量类型,随时可以改变)
print input(如果input数字要转换成int型)
各种运算符
保留字(已被语言占用)、标识符
注释(单行开头#,多行用‘‘‘包住)、缩进
流程控制语句
if、else、elif else结构:选择分支
for in :循环遍历
while结构:不确定次数的循环
pass(占位) continue(跳过本次循环剩余内容) break(跳出循环)
序列
三种序列类型
列表:[]有序可变,可以用下标索引访问
字典:{}有序可变,通过键访问,
元组:()有序不可变,有用作字典的键
切片:[起始:结束:步长],从序列(列表、元组、字符串)中取出一部分,生成一个新的子序列
列表推导式:[表达式 for 变量 in 可迭代对象(range)]
函数
形参、实参概念
形参:def函数时候占位置的符号
实参:调用函数时传入的实际值
如何创建和调用函数
def定义函数并在括号内写入形参
在程序中用函数名调用函数,在括号内写传入的实参
什么是局部变量(函数内部使用)、全局变量(整个文件中均能使用)
字符串
如何切片(与序列相同)、转化大小写(upper、lower、title)、切割(用split函数,括号内写“按什么切割”,空格不写)
正则表达式(一般是r'1[3-9]\d{9}'这样手机号)
面向对象
三要素:封装、继承、多态
模块与异常处理
在程序开头用import调用模块
random随机数、math函数等模块
解释if name == "main"的意思
if直接运行:自己主动点开执行这个文件
if被导入:别的文件调用我的文件
用try except finally处理错误,用raise抛出错误
断点调试程序breakpoint()
用pyinstaller将.py脚本打包成.exe可执行文件
文件与目录操作
open close
模式选择(r,w+,a之类)
file.write写入
用os.path实现文件路径操作
爬虫
urllib:一种爬虫基本模块
request打开和读取URL
header调用模拟浏览器
urlpopen打开网页获取数据
read+decode读取内容返回字节再被处理成字符串
socket套接字
socket定义(ip+端口)在计算机之间建立通道
原理(以ProcessOn绘制流程图):
socket常用函数使用(基于TCP的Socket通信服务端与客户端)
4.2 结课感想
上这门课之前,我在寒假学过一点Python代码,当时还觉得自己算是有点基础,结果第一节课就露怯了。不同于其他授课,王老师先向我们介绍了python是什么、学python可以实现什么。当时听完感觉是python这门语言不需要把精力花在语法折腾上比如定数据类型或者规定数组长度,而是花在怎么组织数据、调用什么结构上。之前我写代码,字典、列表、元组这三个老是混到一块。在老师讲序列那一章的时候,把它们的区别和应用场景说得特别清楚——首先这三个数据类型的符号不同,并且字典用键值对存储,可以通过键快速查找,列表适合存有序的数据,元组不可变所以还能当字典的键。系统讲完一遍之后,写代码时就能自然的知道该选哪个,之前简直是在乱试。老师课上也会讲像Git工具和Gitee平台这样平时接触不到的内容。一开始我觉得版本控制和备份可能没啥作用,存储在自己的文件夹里就行,直到有一次实验把代码改崩,想回退但是发现回不去,才发现git管理并存到gitee库的方便。并且gitee支持多人协作,也为后面团队一起做项目打好了基础。对于英语单词打卡,我一开始还怀疑过这个环节对写python的重要性,单纯想着能提升词汇量,但随着后来看英文报错没那么头疼,写变量名也不用憋半天想不出用什么词,写代码顺手了很多,也慢慢体会到积累英语知识对python学习的好处。
在之后课程学习语法的过程中,我还感受到了很多python语法相对于C语言的独特性。比如动态类型这个特性,变量不用提前声明类型,赋值是什么就是什么,写代码快了很多,但也因此踩过坑:变量类型不知不觉变了,debug半天才发现。还有缩进代替花括号,刚开始很不习惯,经常因为空格多一个少一个报错,但习惯之后确实感觉代码比之前干净。还有就是pip install一行命令就可以搞定pip装库,不用像C语言那样手动下载编译。而所有知识点里我最感兴趣的是爬虫技术,用urllib或requests几行代码就能把整个网页的HTML爬下来,再用re正则或解析库把想要的内容提取出来。当时第一次运行,看到自己做的程序把新浪微博的评论爬下来并做成词云和直观图,我感觉很有成就感。
这门课教给我的,其实不是Python的所有语法——语法在B站上也能学到一些。它教会我的是:每次拿到任务都要仔细分析怎么拆分问题,设计合适的算法解决。在过程中一定不能懈怠,自己犯了错不能找借口,必须明白自己的问题并且给出有效的解决方法。王老师的课讲得很实在,没有花里胡哨的东西,每节课下来都觉得自己真的学到了点什么。课程虽然结束了,但积累到的知识点和解题思路以后肯定用得上。Python课到这个星期就结束了,但是每节课潜移默化带来的思维提升,会一直陪着我的学习生涯。再次感谢老师的引领,也期待以后还能继续听王老师讲课。
5 参考文献
[1] 基于SnowNLP的微博评论数据情感分析.
[2] Python生成词云图的完整指南.


浙公网安备 33010602011771号