Python爬虫爬取豆瓣电影评论
2025-08-26 01:03:59作者:裴麒琰
适用场景
Python爬虫爬取豆瓣电影评论项目适用于多种实际应用场景:
数据分析与研究
- 电影评论情感分析,了解观众对特定电影的情感倾向
- 电影评分趋势分析,追踪电影口碑变化
- 用户评论行为研究,分析评论模式和特征
内容聚合与推荐
- 构建电影评论数据库,为推荐系统提供数据支持
- 收集用户偏好信息,优化个性化推荐算法
- 生成电影评论摘要,提供快速浏览功能
学术研究
- 社交媒体数据分析,研究网络舆论形成机制
- 自然语言处理研究,训练文本分类模型
- 市场调研分析,了解消费者观影偏好
适配系统与环境配置要求
系统要求
- 操作系统:Windows 7/10/11,macOS 10.14+,Linux Ubuntu 16.04+
- Python版本:Python 3.6及以上版本
- 内存:至少4GB RAM(建议8GB以上)
- 存储空间:至少500MB可用空间
环境配置
# 创建虚拟环境
python -m venv douban_spider_env
# 启用虚拟环境
# Windows
douban_spider_env\Scripts\activate
# Linux/macOS
source douban_spider_env/bin/activate
# 安装核心依赖
pip install requests beautifulsoup4 lxml pandas numpy
可选组件
- Scrapy框架:用于构建复杂的爬虫项目
- Selenium:处理JavaScript渲染的页面
- Redis:分布式爬虫任务队列
- MongoDB:非关系型数据存储
资源使用教程
基础爬虫实现
步骤1:分析页面结构 首先需要分析豆瓣电影评论页面的HTML结构,确定评论内容的选择器路径。
步骤2:发送HTTP请求 使用requests库发送GET请求获取页面内容:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
def get_movie_comments(movie_id, start=0):
url = f'https://movie.douban.com/subject/{movie_id}/comments'
params = {'start': start}
response = requests.get(url, headers=headers, params=params)
return response.text
步骤3:解析评论内容 使用BeautifulSoup解析HTML并提取评论信息:
def parse_comments(html):
soup = BeautifulSoup(html, 'lxml')
comments = []
comment_items = soup.select('.comment-item')
for item in comment_items:
comment = {
'user': item.select_one('.comment-info a').text,
'rating': item.select_one('.rating')['title'] if item.select_one('.rating') else '无评分',
'time': item.select_one('.comment-time').text.strip(),
'content': item.select_one('.comment-content').text.strip()
}
comments.append(comment)
return comments
步骤4:数据存储 将爬取的数据保存为CSV文件:
import pandas as pd
def save_to_csv(comments, filename):
df = pd.DataFrame(comments)
df.to_csv(filename, index=False, encoding='utf-8-sig')
高级功能实现
分页爬取 实现自动翻页功能,爬取多页评论:
def crawl_all_comments(movie_id, max_pages=10):
all_comments = []
for page in range(max_pages):
start = page * 20
html = get_movie_comments(movie_id, start)
comments = parse_comments(html)
all_comments.extend(comments)
time.sleep(1) # 添加延时避免请求过于频繁
return all_comments
异常处理 添加完善的异常处理机制:
def safe_crawl(movie_id, max_pages):
try:
comments = crawl_all_comments(movie_id, max_pages)
save_to_csv(comments, f'douban_comments_{movie_id}.csv')
print(f"成功爬取{len(comments)}条评论")
except Exception as e:
print(f"爬取过程中出现错误: {e}")
常见问题及解决办法
反爬虫机制应对
请求频率限制问题
- 使用请求间隔控制,避免过于频繁的访问
- 设置合理的请求间隔时间(建议2-5秒)
- 使用随机User-Agent头部
访问限制处理
- 遇到访问限制时暂停爬取
- 考虑调整爬取策略
- 遵守网站访问规则
数据解析问题
页面结构变化
- 定期检查选择器是否有效
- 使用更稳定的CSS选择器
- 添加备用解析方案
编码问题
- 统一使用UTF-8编码处理文本
- 处理特殊字符和emoji表情
- 使用chardet库检测编码
性能优化
内存管理
- 分批处理大量数据
- 及时释放不再使用的对象
- 使用生成器减少内存占用
网络优化
- 使用连接池复用HTTP连接
- 启用gzip压缩减少数据传输量
- 设置合理的超时时间
合规使用考虑
遵守robots.txt
- 尊重网站的爬虫协议
- 控制爬取频率和数量
- 仅用于学习和研究目的
数据使用规范
- 不用于商业用途
- 注明数据来源
- 保护用户隐私信息
通过合理使用这些技巧和注意事项,您可以高效、稳定地爬取豆瓣电影评论数据,为后续的数据分析和研究提供可靠的数据支持。