本项目是一个豆瓣电影信息爬虫系统,用于爬取指定城市(默认武汉)的豆瓣电影信息,并进行数据分析和可视化。项目采用模块化设计,代码规范清晰,适合Python学习者参考和实践。
- 🕷️ 智能爬虫:自动爬取电影基本信息(名称、链接、上映时间、国家、想看人数等)
- 💬 评论采集:批量获取电影评论,支持分页处理
- 📊 数据分析:自动排序、统计词频、分析高频/低频词汇
- 📈 数据可视化:生成Top 5电影柱状图和评论词云图
- 💾 多格式存储:支持CSV和JSON两种数据格式
本项目由刚学完Python的计算机专业大学生开发,是一个综合性的爬虫实践项目。项目旨在:
- ✅ 巩固Python基础语法和面向对象编程
- ✅ 学习网络爬虫技术(requests、BeautifulSoup)
- ✅ 掌握数据处理和分析(pandas)
- ✅ 实践数据可视化(matplotlib)
- ✅ 学习中文文本处理(jieba、wordcloud)
- ✅ 培养项目开发能力和代码规范意识
- 爬取电影基本信息(名称、链接、上映时间、国家、想看人数)
- 批量获取电影评论(可配置每部电影的评论数量)
- 智能处理分页逻辑
- 异常处理和重试机制
- 按想看人数自动排序
- 支持CSV和JSON格式导出
- 数据清洗和验证
- 生成Top N电影柱状图(默认Top 5)
- 自动处理长电影名称显示
- 高质量PNG图片输出
- 中文分词处理(jieba)
- 停用词过滤
- 词频统计(高频/低频词汇)
- 生成词云图
| 类别 | 技术 |
|---|---|
| 编程语言 | Python 3.9 |
| 网络请求 | requests |
| HTML解析 | BeautifulSoup4, lxml |
| 数据处理 | pandas |
| 数据可视化 | matplotlib |
| 中文分词 | jieba |
| 词云生成 | wordcloud |
douban-movie-spider/
├── 📄 main.py # 主程序入口
├── 🕷️ spider.py # 爬虫模块
├── 📊 data_processor.py # 数据处理模块
├── 📈 visualizer.py # 可视化模块
├── ☁️ wordcloud_generator.py # 词云生成模块
├── 🔧 utils.py # 工具函数
├── ⚙️ config.py # 配置文件
├── 📋 requirements.txt # 依赖包列表
├── 📖 README.md # 项目说明文档
├── 📚 DEPLOYMENT.md # 部署指南
├── 📂 data/ # 数据存储目录
│ ├── movies.csv # CSV格式电影数据
│ ├── movies.json # JSON格式电影数据
│ └── word_statistics.txt # 词频统计报告
└── 📂 images/ # 图片输出目录
├── top5_movies.png # Top 5电影柱状图
└── wordcloud.png # 评论词云图
- Python 3.9 或更高版本
- 网络连接(需要访问豆瓣网站)
# 使用 Git 克隆
git clone https://github.com/YEYUbaka/doubanspider.git
# 或直接下载 ZIP 文件并解压cd 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/activate激活成功后,命令行提示符前会显示 (venv)。
pip install -r requirements.txtpython 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 = 2
# 每部电影爬取的评论数量
COMMENTS_PER_MOVIE = 30
# 显示前N部电影
TOP_N_MOVIES = 5- 打开
config.py文件 - 修改
CITY变量:CITY = "beijing" # 改为北京
- 保存并重新运行程序
在 config.py 中修改:
# 每部电影爬取的评论数量
COMMENTS_PER_MOVIE = 50 # 改为50条
# 显示前N部电影
TOP_N_MOVIES = 10 # 改为Top 10| 文件 | 格式 | 说明 |
|---|---|---|
movies.csv |
CSV | 电影信息表格,可用Excel打开 |
movies.json |
JSON | 电影信息JSON格式,便于程序处理 |
word_statistics.txt |
TXT | 词频统计报告,包含高频和低频词汇 |
| 文件 | 说明 |
|---|---|
top5_movies.png |
想看人数Top 5电影的柱状图 |
wordcloud.png |
基于评论生成的词云图 |
如果遇到反爬虫限制,可以增加延迟时间:
# config.py
REQUEST_DELAY = 3 # 增加到3秒修改 wordcloud_generator.py 中的词云配置:
wordcloud_config = {
'width': 1200, # 宽度
'height': 600, # 高度
'background_color': 'white', # 背景色
'colormap': 'viridis', # 颜色方案
}-
遵守网站规则
- 本项目仅用于学习研究目的
- 请遵守豆瓣网站的服务条款
- 不要进行商业用途
-
网络环境
- 确保能够正常访问豆瓣网站
- 如果遇到访问限制,可能需要使用代理
-
字体支持
- 词云图需要中文字体支持
- Windows系统通常自带中文字体
- Linux系统可能需要安装中文字体包
-
数据使用
- 爬取的数据仅供学习使用
- 请勿用于商业目的
- 尊重版权和隐私
A: 检查以下几点:
- ✅ 网络连接是否正常
- ✅ 能否正常访问豆瓣网站
- ✅ 如果遇到反爬虫限制,增加
REQUEST_DELAY的值 - ✅ 检查请求头设置是否正确
A: 确保系统安装了中文字体:
- Windows: 通常自带 SimHei、SimSun 等字体
- Linux: 安装中文字体包
sudo apt-get install fonts-wqy-microhei - Mac: 系统自带中文字体
程序会自动查找系统字体,如果找不到会显示警告。
A: 在 config.py 中修改 CITY 变量:
CITY = "beijing" # 北京
CITY = "shanghai" # 上海
CITY = "guangzhou" # 广州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 或更高
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 代码遵循 PEP 8 规范
- 使用 UTF-8 编码
- 所有函数和类都有文档字符串
- 包含完整的异常处理
- 使用有意义的变量命名
本项目仅用于学习研究目的,不进行商业用途。
卑微计算机专业大学生
- GitHub: @YEYUbaka
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
Made with ❤️ by a Python learner