12行Python代码实现豆瓣短评极简爬虫
1. 项目背景与核心思路去年帮朋友做影视数据分析时需要快速获取《黑豹》的豆瓣短评数据。传统爬虫教程往往从零开始搭建完整框架但对于快速验证需求来说过于笨重。经过反复测试我发现用Python的requests库配合基础字符串处理12行代码就能完成核心功能。这种极简爬虫特别适合需要快速验证数据源的临时需求学习HTTP请求与网页解析的入门者对轻量级数据采集有需求的个人开发者重要提示实际操作请遵守豆瓣robots.txt规定控制请求频率建议每秒不超过1次避免对服务器造成压力。本文示例仅用于技术学习。2. 技术实现与代码解析2.1 基础环境准备需要安装Python3.6和requests库pip install requests2.2 核心代码实现import requests url https://movie.douban.com/subject/6390825/comments?limit20 headers {User-Agent: Mozilla/5.0} resp requests.get(url, headersheaders) comments [div.split(/span)[1].split()[0] for div in resp.text.split(comment-item)[1:]] print(\n.join(comments[:10])) # 打印前10条短评代码关键点解析User-Agent伪装成浏览器访问豆瓣会拦截无头请求通过字符串分割提取评论内容比正则表达式更易读切片处理避免数组越界2.3 反爬应对策略当遇到429 Too Many Requests错误时添加随机延迟time.sleep(random.uniform(1,3))使用代理IP池轮询遵守豆瓣API速率限制非登录用户每分钟40次3. 完整功能扩展3.1 分页爬取实现通过观察URL参数规律实现自动翻页for page in range(0, 100, 20): # 每页20条爬5页 url fhttps://.../comments?start{page}limit20 # 后续处理逻辑相同3.2 数据持久化存储建议使用CSV格式保存import csv with open(comments.csv, w, encodingutf-8) as f: writer csv.writer(f) writer.writerow([序号, 内容]) for i, comment in enumerate(comments): writer.writerow([i1, comment])4. 常见问题排查4.1 请求被拒绝403错误检查User-Agent是否有效尝试添加Referer头headers[Referer] https://movie.douban.com4.2 数据提取失败使用print(resp.text[:500])确认网页结构豆瓣改版时需要调整字符串分割逻辑4.3 频率限制规避建议的完整请求模板import time import random def safe_request(url): time.sleep(random.uniform(1.5, 3)) resp requests.get(url, headers{ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Referer: https://movie.douban.com }) return resp if resp.status_code 200 else None5. 工程化建议对于需要长期运行的项目建议使用Scrapy框架搭建完整爬虫集成RotatingProxyMiddleware实现IP轮换添加MongoDB存储支持非结构化数据通过Celery实现分布式任务调度实测这个极简方案在2023年豆瓣前端未大改版前持续有效核心思路是通过最小化代码验证数据获取可行性。对于正式项目建议申请豆瓣官方API需企业资质或使用合规的第三方数据服务。