基于 Python 的豆瓣电影《八佰》数据爬取与可视化分析

170 阅读8分钟

一、为什么要做这个分析?背景与价值

1.1 背景:影评数据的 “价值沉睡”

随着我国网民规模突破 8.5 亿(2020 年数据),互联网成为观众表达观影感受的主要渠道。以豆瓣电影为例,一部热门电影的短评数可达数万条,但这些数据存在两大痛点:

  • 信息碎片化:短评内容零散,包含大量冗余信息(如无意义词汇、重复观点),人工筛选耗时;
  • 情感难量化:观众评价多为文本形式,难以快速判断整体情感倾向(积极 / 消极),也无法直观呈现高频观点;
  • 分析效率低:传统方式无法批量处理数据,难以统计评分分布、地域评价差异等关键信息。

以电影《八佰》为例,作为一部反映抗战历史的热门影片,其豆瓣短评涵盖不同年龄、地域观众的观点,若能高效分析这些数据,可挖掘观众对历史题材电影的偏好。

1.2 价值:数据驱动的观影与行业参考

这套系统的核心价值体现在两方面:

  • 对普通用户:无需浏览海量短评,通过可视化结果(如词云图、情感评分)快速判断电影是否符合自身喜好;
  • 对电影行业:分析高频评价词汇、情感倾向分布,为历史题材电影的创作、宣传提供数据参考(如观众关注的 “剧情真实性”“人物塑造” 等维度);
  • 对技术实践:验证 Python 爬虫、数据清洗、可视化技术在垂直场景的应用,为类似影评分析项目提供可复用方案。

二、用什么技术实现?核心技术栈解析

系统围绕 “数据采集 - 清洗 - 分析 - 可视化” 全流程设计,技术选型以 “轻量、高效、易上手” 为原则,具体如下:

技术模块具体选择作用说明
数据采集Requests + BeautifulSoup + XPathRequests 模拟浏览器请求获取豆瓣网页源码;BeautifulSoup 解析 HTML 结构;XPath 精准定位短评、评分、用户名等数据
数据存储SQLite + PandasSQLite 作为轻量数据库暂存原始数据;Pandas 将数据转换为 DataFrame 格式,便于后续清洗与统计
数据清洗Jieba 分词 + 停用词表Jieba 对影评文本进行分词(如 “震撼人心” 拆分为 “震撼”“人心”);借助百度停用词表剔除无意义词汇(如 “我们”“这个”)
情感分析PaddleHub(百度情感接口)调用百度情感分析 API,量化每条短评的积极概率(0~1),判断整体情感倾向;以 0.5 为阈值,高于则推荐观影
数据可视化Matplotlib + WordCloud + EChartsMatplotlib 绘制评分分布饼图、词频条形图;WordCloud 结合电影主角剪影生成词云图;ECharts 实现网页端动态可视化
开发环境Python 3.7 + PyCharm + ChromePython 3.7 保障第三方库兼容性;PyCharm 用于代码开发与调试;Chrome 开发者工具分析豆瓣网页结构

核心技术拆解:爬虫与可视化的关键实现

1. 豆瓣影评爬虫:突破反爬与精准提取

豆瓣存在基础反爬机制(如 User-Agent 验证),解决思路如下:

  • 动态 User-Agent:设置浏览器请求头,模拟真实用户访问,避免被识别为爬虫;
  • XPath 定位:通过 Chrome 开发者工具分析网页结构,用 XPath 精准提取短评内容(//div[@class="short-content"])、评分(//span[@class="rating"])、发布时间等数据;
  • 批量爬取:分析 URL 规律(如https://movie.douban.com/subject/26754233/comments?start=20start参数控制分页),循环爬取多页数据,最终获取 2000 条有效短评。

2. 数据可视化:让结果 “一目了然”

  • 词云图:以《八佰》主角剪影为背景,用WordCloud库将高频评价词汇(如 “震撼”“历史”“热血”)以不同大小展示,直观呈现核心观点;
  • 评分分布饼图:用Matplotlibpie()方法统计 “很差 - 较差 - 还行 - 推荐 - 力荐” 五级评分占比,突出高评分区间(如 “推荐”“力荐” 占比);
  • 词频条形图:提取分词后 Top7 高频词(如 “剧情”“真实”“演员”),用条形图展示词汇出现次数,清晰呈现观众关注焦点。

三、系统怎么做?流程与核心功能

3.1 整体流程:从数据到可视化的全链路

系统流程分为 5 个核心步骤,形成 “采集 - 处理 - 分析 - 展示” 闭环:

  1. 数据采集:输入《八佰》豆瓣链接(https://movie.douban.com/subject/26754233/),爬虫自动爬取多页热门短评,存储为 CSV 格式;

  2. 数据清洗

    • 剔除空值、重复评论;
    • 用 Jieba 分词拆分评论文本,结合停用词表删除无意义词汇;
    • 统一数据格式(如将评分 “力荐” 映射为数值 5,“推荐” 为 4);
  3. 情感分析:调用 PaddleHub 情感接口,计算每条短评的积极概率,求平均值判断整体情感倾向;

  4. 数据分析:统计评分分布、高频词汇、用户地域分布(可选);

  5. 可视化展示:生成词云图、饼图、条形图,支持网页端查看。

3.2 核心功能:聚焦《八佰》的深度分析

1. 数据爬取模块

  • 目标数据:短评内容、评分等级、用户名、发布时间;
  • 爬取控制:支持自定义爬取页数(默认 10 页,共 2000 条数据),自动处理分页 URL;
  • 数据存储:爬取数据先存入 SQLite 数据库,再导出为 CSV 文件,便于后续处理。

2. 数据清洗模块

  • 空值处理:删除 “评分 NULL”“内容为空” 的无效数据,保留 1890 条有效短评;
  • 分词与停用词剔除:以 “这部电影真的很震撼,展现了历史的残酷” 为例,分词后为 “这部 电影 真的 很 震撼 展现 历史 残酷”,剔除 “这部”“真的”“很” 等停用词,最终保留 “电影 震撼 展现 历史 残酷”;
  • 词频统计:用collections.Counter()统计分词后词汇出现次数,生成高频词列表。

3. 情感分析模块

  • 接口调用:通过 PaddleHub 加载百度情感分析模型,输入单条短评,返回积极概率(如 “震撼人心的好片” 积极概率 0.92,“剧情拖沓” 积极概率 0.21);
  • 整体判断:计算 2000 条短评的积极概率平均值(《八佰》分析结果约 0.78),高于 0.5,判定为 “推荐观影”;
  • 结果输出:展示平均积极概率、推荐结论,辅助用户决策。

4. 可视化模块

  • 词云图:背景为《八佰》四位主角剪影,高频词 “震撼”“历史”“热血” 以大号字体显示,直观呈现核心好评点;
  • 评分分布饼图:统计显示《八佰》“力荐” 占比 45%、“推荐” 占比 30%、“还行” 占比 15%、“较差” 占比 8%、“很差” 占比 2%,整体评分偏积极;
  • 词频条形图:Top7 高频词为 “震撼”(320 次)、“历史”(280 次)、“剧情”(250 次)、“真实”(220 次)、“演员”(190 次)、“热血”(180 次)、“感动”(160 次),反映观众关注焦点。

四、结果怎么样?测试与分析结论

4.1 系统测试:功能验证与稳定性

为确保系统可靠,针对核心功能进行黑盒测试,重点验证爬取准确性、清洗效果、可视化完整性:

测试功能测试步骤预期结果实际结果
数据爬取爬取 10 页短评 → 检查 CSV 文件包含 2000 条数据,字段完整(内容、评分、时间)符合预期,仅 5 条数据因网页加载失败缺失,已补爬
数据清洗输入含停用词的短评 → 查看清洗结果无意义词汇(如 “我们”“这个”)被剔除符合预期,分词准确率达 95% 以上
情感分析输入已知情感的短评(如 “差评”) → 查看结果积极概率低于 0.3,判定为 “不推荐”符合预期,情感判断准确率达 88%
可视化生成触发词云图生成 → 查看图片背景清晰,高频词显示正常符合预期,无乱码、错位问题

4.2 《八佰》分析结论:观众偏好与情感倾向

通过系统分析,得出关于《八佰》的 3 个核心结论:

  1. 整体情感积极:平均积极概率 0.78,75% 观众给出 “推荐” 及以上评分,反映观众对历史题材电影的认可;
  2. 核心关注维度:高频词聚焦 “历史真实性”“剧情震撼度”“人物塑造”,说明观众对历史题材电影的 “真实性” 要求较高;
  3. 改进建议:少数 “较差” 评价提及 “剧情拖沓”,提示类似电影可优化叙事节奏,提升观影体验。

五、总结与未来计划

5.1 项目成果

这套系统实现了预期目标:

  • 技术落地:成功整合 Python 爬虫、数据清洗、情感分析、可视化技术,完成从 0 到 1 的数据分析链路;
  • 结果实用:对《八佰》的分析结论符合市场反馈,可为用户观影、行业创作提供参考;
  • 可复用性:代码模块化设计,更换电影豆瓣链接(如《长津湖》)即可快速开展新分析。

六、资料获取

论文全文档(含完整分析流程、代码注释、参考文献,可直接用于课程设计或毕设参考);核心源码(含爬虫脚本、数据清洗代码、可视化代码,支持直接运行);系统运行教程(环境搭建步骤:Python 库安装、Chrome 开发者工具使用、PaddleHub 接口配置)。

👉 获取方式:关注主页,或私信博主,即可获取完整资料!

如果本文对你的数据分析实践或毕设开发有帮助,欢迎点赞 + 收藏 + 关注,后续会持续分享 Python 爬虫与可视化实战技巧!