TMDB 电影榜单数据采集系统

TMDB Top Rated 电影爬虫项目报告

一、项目概述

本项目是一个基于 Python 的网页爬虫,用于从 The Movie Database (TMDB) 官网爬取 Top Rated 电影(评分最高电影)的详细信息,并将结果保存为 CSV 文件,便于后续数据分析或展示。

主要目标

  • 自动抓取 TMDB 评分最高电影的前 N 页数据(当前设置为 5 页)
  • 提取每部电影的核心信息:名称、年份、上映日期、类型、时长、评分、语言、作者、标语、简介
  • 将结果结构化存储至 CSV 文件,便于查看和进一步处理

适用场景

  • 电影数据分析与可视化
  • 构建个人电影推荐系统
  • 学术研究或市场调研的数据采集

二、技术架构

组件 技术选型 说明
HTTP 请求 requests 发送 GET 请求获取网页 HTML
HTML 解析 lxml.html 使用 XPath 提取页面元素
数据存储 csv(标准库) 写入 UTF-8 编码的 CSV 文件
编程语言 Python 3.x 无需额外框架,轻量级脚本

三、功能模块详解

3.1 全局常量

  • MOVIE_LIST_FILE:输出 CSV 文件路径,默认为 csv_data/movie_list.csv
  • TMDB_TOP_URL_1:TMDB Top Rated 第 1 页的 URL
  • TMDB_BASE_URL:TMDB 网站基础 URL,用于拼接详情页
  • TMDB_TOP_URL_2:存在问题,该常量在定义时使用 page_num(值为1),但实际并未包含页码参数,且后面 main 中构造的 URL 混乱,详见“潜在问题”部分。

3.2 get_movie_info(movie_info_url)

功能:根据电影的详情页 URL,爬取并解析该页面的所有电影元数据。

实现步骤:

  1. 发送 GET 请求获取详情页 HTML。
  2. 使用 lxml.html.fromstring 解析文档。
  3. 通过 XPath 提取各项信息(名称、年份、评分等)。
  4. 对标语和简介做特殊处理:若标语等于简介或为“简介”等无意义内容,则置为“无”。
  5. 将提取结果组装为字典返回。

提取字段:

  • 电影名称、电影年份、上映日期、类型(多个用逗号连接)、电影时长、电影评分、语言、作者、标语、简介

3.3 save_all_movies(all_movies)

功能:将电影列表写入 CSV 文件。

  • 使用 csv.DictWriter 写入表头与数据行。
  • 文件以 UTF-8 编码保存,避免中文乱码。

3.4 main()

功能:主流程控制。

  • 初始化空列表 all_movies。
  • 循环页码从 1 到 5:
    • 根据页码构造 URL 并发送请求(第 1 页使用 TMDB_TOP_URL_1,其余使用 TMDB_TOP_URL_2,但后者构造错误)。
    • 使用 XPath 选取当前页的所有电影卡片元素(
      )。
    • 遍历每个卡片,提取详情页链接,拼接完整 URL 后调用 get_movie_info 获取详情。
    • 将返回的电影字典加入 all_movies。
  • 全部爬取完成后调用 save_all_movies 保存数据。

四、工作流程

程序启动与初始化
执行 main() 函数,创建一个空列表 all_movies,用于存储爬取到的所有电影信息。同时固定爬取页码范围(当前硬编码为第1页至第5页)。

循环翻页与请求发送
对于每个页码(1~5),首先构造目标 URL,随后通过 requests.get() 发送 HTTP 请求,获取该页的 HTML 内容,并设置 60 秒超时。

解析列表页,提取电影卡片
利用 lxml.html.fromstring 将返回的 HTML 解析为文档对象,然后使用 XPath 表达式选取页面中所有电影卡片元素(特征为 class 包含 w-full overflow-hidden rounded-xl 的

)。每个卡片对应一部电影的简介入口。

遍历卡片,获取详情链接
对每一个电影卡片,从中提取详情页的相对链接,并与 TMDB_BASE_URL 拼接,得到完整的电影详情页 URL。

爬取单部电影的详细信息
调用 get_movie_info(详情页URL) 函数,该函数内部执行:

发送请求获取详情页 HTML;

通过多个 XPath 提取字段:名称、年份、上映日期、类型(多个类型用逗号连接)、时长、评分、语言、作者、标语、简介;

对标语与简介进行简单清洗:若标语与简介内容相同或标语为“简介”等无意义文本,则置为“无”;

将所有字段组装成一个字典并返回。

数据收集与持久化
将每部电影返回的字典追加到 all_movies 列表。完成所有页码的遍历后,调用 save_all_movies(all_movies),将列表中的字典按预定义字段顺序写入 csv_data/movie_list.csv 文件,包含表头,使用 UTF-8 编码,确保中文正常显示。最后程序结束。

五、部署与运行

环境准备

  • Python 3.6+

代码仓库

https://github.com/mmt-hub/web-crawler

安装依赖

pip install requests lxml
项目根目录/
├── 网页爬虫-电影.py       # 主脚本
└── csv_data/              # 输出目录(自动创建)
    └── movie_list.csv     # 爬取结果

### 运行方式

```bash
python 网页爬虫-电影.py

抓取结果展示

image

六、总结与展望

本项目展示了一个基础的网页爬虫实现,能够从 TMDB 抓取 Top Rated 电影数据,整体结构清晰,易于扩展。

后续优化方向

  • 迁移至官方 API:TMDB 提供完善的 RESTful API,无需解析 HTML,数据更稳定、获取更高效。
  • 增加并发抓取:使用 asyncio 或 threading 提升爬取速度。
  • 支持更多筛选条件:如按年份、类型、语言等定制爬取。
  • 数据持久化升级:从 CSV 扩展到 SQLite 或 MySQL,便于复杂查询。
  • 可视化展示:结合 matplotlib 或 pandas 对抓取数据进行分析。
posted @ 2026-08-18 15:31  Hsibo  阅读(9)  评论(0)    收藏  举报