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,爬取并解析该页面的所有电影元数据。
实现步骤:
- 发送 GET 请求获取详情页 HTML。
- 使用 lxml.html.fromstring 解析文档。
- 通过 XPath 提取各项信息(名称、年份、评分等)。
- 对标语和简介做特殊处理:若标语等于简介或为“简介”等无意义内容,则置为“无”。
- 将提取结果组装为字典返回。
提取字段:
- 电影名称、电影年份、上映日期、类型(多个用逗号连接)、电影时长、电影评分、语言、作者、标语、简介
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
抓取结果展示

六、总结与展望
本项目展示了一个基础的网页爬虫实现,能够从 TMDB 抓取 Top Rated 电影数据,整体结构清晰,易于扩展。
后续优化方向
- 迁移至官方 API:TMDB 提供完善的 RESTful API,无需解析 HTML,数据更稳定、获取更高效。
- 增加并发抓取:使用 asyncio 或 threading 提升爬取速度。
- 支持更多筛选条件:如按年份、类型、语言等定制爬取。
- 数据持久化升级:从 CSV 扩展到 SQLite 或 MySQL,便于复杂查询。
- 可视化展示:结合 matplotlib 或 pandas 对抓取数据进行分析。
浙公网安备 33010602011771号