本项目是一个豆瓣电影信息爬虫系统,用于爬取指定城市(默认武汉)的豆瓣电影信息,并进行数据分析和可视化。项目采用模块化设计,代码规范清晰。
- 🕷️ 智能爬虫:自动爬取电影基本信息(名称、链接、上映时间、国家、想看人数等)
- 💬 评论采集:通过 Rexxar API 批量获取电影短评(移动端内部接口,无需浏览器)
- 📊 数据分析:自动排序、统计词频、分析高频/低频词汇
- 📈 数据可视化:生成 Top 5 电影柱状图和评论词云图
- 💾 多格式存储:支持 CSV 和 JSON 两种数据格式
| 类别 | 技术 |
|---|---|
| 编程语言 | Python 3.9 |
| 网络请求 | requests + Rexxar API |
| HTML解析 | BeautifulSoup4, lxml |
| 数据处理 | pandas |
| 数据可视化 | matplotlib |
| 中文分词 | jieba |
| 词云生成 | wordcloud |
评论数据通过豆瓣移动端内部接口 Rexxar API v2 获取:
- 项目: x1ao4/douban-api — 豆瓣移动端 API 服务
- 端点:
GET https://m.douban.com/rexxar/api/v2/movie/{id}/interests - 说明: 返回已看用户的评分短评 JSON 数据,无需 Cookie/登录态,反爬策略比桌面端宽松
- Python 3.9 或更高版本
- 网络连接(需要访问豆瓣网站)
git clone https://github.com/YEYUbaka/doubanspider.gitcd doubanspider# Windows
python -m venv venv
# Linux/Mac
python3 -m venv venvWindows PowerShell:
.\venv\Scripts\Activate.ps1如果遇到执行策略错误:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserWindows CMD:
venv\Scripts\activate.batLinux/Mac:
source venv/bin/activatepip install -r requirements.txt国内用户可使用镜像加速:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepython main.py-
运行主程序
python main.py
-
程序会自动执行以下步骤:
- ✅ 爬取电影列表
- ✅ 获取每部电影的评论
- ✅ 保存数据到本地文件
- ✅ 生成可视化图表
- ✅ 生成词云图
-
查看结果
- 数据文件:
data/movies.csv和data/movies.json - 可视化图表:
images/top5_movies.png - 词云图:
images/wordcloud.png - 词频统计:
data/word_statistics.txt
- 数据文件:
主要配置在 config.py 文件中,可以根据需要修改:
# 目标城市(豆瓣城市代码)
CITY = "wuhan" # 可改为 "beijing", "shanghai" 等
# 请求延迟(秒)
REQUEST_DELAY = 5 # 页面爬取延迟
REXXAR_API_DELAY = 2 # API 请求间隔
# 每部电影爬取的评论数量
COMMENTS_PER_MOVIE = 30
# 显示前N部电影
TOP_N_MOVIES = 5CITY = "beijing" # 北京
CITY = "shanghai" # 上海
CITY = "guangzhou" # 广州COMMENTS_PER_MOVIE = 50 # 每部电影 50 条评论
TOP_N_MOVIES = 10 # Top 10 图表douban-movie-spider/
├── 📄 main.py # 主程序入口,编排 6 个步骤
├── 🕷️ spider.py # 爬虫模块(电影列表 + Rexxar API 评论)
├── 📊 data_processor.py # 数据处理模块
├── 📈 visualizer.py # 可视化模块
├── ☁️ wordcloud_generator.py # 词云生成模块
├── 🔧 utils.py # 工具函数
├── ⚙️ config.py # 配置文件
├── 📋 requirements.txt # 依赖包列表
├── 📖 README.md # 项目说明文档
├── 📝 CLAUDE.md # AI 工作指引文档
├── 📂 data/ # 数据存储目录
│ ├── movies.csv # CSV格式电影数据
│ ├── movies.json # JSON格式电影数据
│ └── word_statistics.txt # 词频统计报告
└── 📂 images/ # 图片输出目录
├── top5_movies.png # Top 5电影柱状图
└── wordcloud.png # 评论词云图
| 模块 | 技术 | 职责 |
|---|---|---|
main.py |
- | 编排 6 个步骤:初始化 → 爬取列表 → 爬取评论 → 保存 → 可视化 → 词云 |
spider.py |
requests + BeautifulSoup + Rexxar API | 爬取电影列表 HTML 和评论 JSON |
data_processor.py |
pandas | CSV/JSON 读写,按想看人数排序 |
visualizer.py |
matplotlib | 生成 Top N 柱状图 |
wordcloud_generator.py |
jieba, wordcloud | 中文分词,词频统计,生成词云 |
utils.py |
- | 日志配置,文本清洗,数字/ID 提取 |
| 文件 | 格式 | 说明 |
|---|---|---|
movies.csv |
CSV | 电影信息表格,可用Excel打开 |
movies.json |
JSON | 电影信息JSON格式,便于程序处理 |
word_statistics.txt |
TXT | 词频统计报告,包含高频和低频词汇 |
| 文件 | 说明 |
|---|---|
top5_movies.png |
想看人数 Top 5 电影的柱状图 |
wordcloud.png |
基于评论生成的词云图 |
如果遇到反爬虫限制,可以增加延迟时间:
# config.py
REQUEST_DELAY = 10 # 页面爬取间隔增加到 10 秒
REXXAR_API_DELAY = 5 # API 请求间隔增加到 5 秒修改 wordcloud_generator.py 中的词云配置:
wordcloud_config = {
'width': 1200, # 宽度
'height': 600, # 高度
'background_color': 'white', # 背景色
'colormap': 'viridis', # 颜色方案
}-
遵守网站规则
- 本项目仅用于学习研究目的
- 请遵守豆瓣网站的服务条款
- 不要进行商业用途
-
网络环境
- 确保能够正常访问豆瓣网站
- 如果遇到访问限制,可能需要使用代理
-
字体支持
- 词云图需要中文字体支持
- Windows 系统通常自带 SimHei 字体
- Linux 系统可能需要安装中文字体包
-
数据使用
- 爬取的数据仅供学习使用
- 请勿用于商业目的
- 尊重版权和隐私
A: 检查以下几点:
- ✅ 网络连接是否正常
- ✅ 能否正常访问豆瓣网站
- ✅ 如果遇到反爬虫限制,增加
REQUEST_DELAY的值 - ✅ 检查请求头设置是否正确
A: 可能原因和解决方法:
- 该电影为新上映影片,暂无用户评分短评(Rexxar API 正常返回空数据)
- 检查网络是否能正常访问
m.douban.com - 更新
config.py中的REXXAR_HEADERS的User-Agent为最新移动端 UA - 若持续失败,可尝试添加 Cookie(从浏览器复制登录后的 Cookie)
A: 豆瓣内部 API 可能已更新:
- 404 说明端点路径已变,需通过抓包分析最新的 Rexxar API 路径
- 403 说明请求头被拦截,更新
REXXAR_HEADERS中的User-Agent为最新 Android UA - 添加
Referer: https://m.douban.com/movie/subject/{movie_id}/请求头
A: 确保系统安装了中文字体:
- Windows: 通常自带 SimHei、SimSun 等字体
- Linux: 安装中文字体包
sudo apt-get install fonts-wqy-microhei - Mac: 系统自带中文字体
程序会自动查找系统字体,如果找不到会显示警告。
A: Windows PowerShell 执行策略问题:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserA: 尝试以下方法:
- 使用国内镜像源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - 升级 pip:
python -m pip install --upgrade pip - 检查 Python 版本是否为 3.9 或更高
在重新运行项目时发现,评论爬取功能完全失效,所有电影的评论数量都是 0 条。经排查,webdriver-manager 无法连接谷歌服务器下载 ChromeDriver,导致 Selenium 初始化失败。
原有方案的依赖链问题:
- 评论爬取依赖 Selenium + ChromeDriver
- ChromeDriver 通过
webdriver-manager自动下载 - 在某些网络环境下无法访问谷歌 CDN,导致整个评论功能不可用
弃用 Selenium,改用豆瓣 Rexxar API v2(移动端内部接口),直接请求 JSON 数据:
技术实现:
- 使用
https://m.douban.com/rexxar/api/v2/movie/{id}/interests端点 - 模拟 Android 移动端请求头(User-Agent、Referer)
- 分页获取已看用户的评分短评(
status=done) - JSON 纯数据解析,无需浏览器渲染
修改文件:
spider.py- 移除 Selenium 代码,新增_request_json()方法和 Rexxar API 爬取逻辑config.py- 新增REXXAR_HEADERS、REXXAR_API_DELAY等配置项requirements.txt- 移除 selenium 和 webdriver-manager 依赖CLAUDE.md- 新建,项目文档和工作指引
- ❌ 修复前: 评论爬取完全失效 = 0条
- ✅ 修复后: 55 部电影成功爬取,共 1,648 条评论
- ✅ 每部电影: 稳定获取 30 条(达到配置上限)
- ✅ 速度提升: 无需启动浏览器,每部电影仅需 7 秒
依赖已精简:
pip install -r requirements.txt无需安装 Chrome 浏览器和 ChromeDriver,纯 Python 依赖。
注意事项:
- Rexxar API 是豆瓣移动端内部接口,无官方文档,端点可能随豆瓣更新而变化
- 若 API 返回 403 或空数据,尝试更新
config.py中的REXXAR_HEADERS的User-Agent - 建议保持
REXXAR_API_DELAY = 2的请求间隔,避免触发限流
⚠️ 注意: 此方案已被 2026-05-07 的 Rexxar API 方案取代。以下内容仅作历史记录保留。
在重新运行项目时发现,虽然热搜榜电影名称、链接、想看人数都能正常获取,但评论爬取功能完全失效,所有电影的评论数量都是0条。
经过调试分析发现,豆瓣网站对评论页面启用了 JavaScript 反爬虫验证机制:
- 访问评论页面时返回一个 JavaScript 挑战页面
- 需要执行 SHA-512 哈希计算(工作量证明 PoW)
- 传统的 requests 库无法执行 JavaScript,导致无法获取真实评论内容
采用 Selenium + Chrome WebDriver 技术方案,使用真实浏览器模拟访问:
技术实现:
- 集成 Selenium WebDriver(无头模式运行)
- 自动等待页面 JavaScript 执行完成
- 解析渲染后的 HTML 获取评论内容
- 保持合理的请求延迟避免被封
- ❌ 修复前: 所有电影评论数量 = 0条
- ✅ 修复后: 每部电影成功获取 19-30条评论
- ✅ 测试结果: 62部电影全部正常爬取评论
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
卑微计算机专业大学生
- GitHub: @YEYUbaka
- Claude Code (Anthropic) — 代码审查与优化建议
本项目仅用于学习研究目的,不进行商业用途。
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
Made with ❤️ by a Python learner