Python迷你爬虫实战:12行代码抓取豆瓣短评
1. 项目背景与目标解析最近在重温漫威电影《黑豹》想看看观众对这部开创性超级英雄电影的真实评价。豆瓣作为国内最权威的影视评分平台短评区往往藏着最真实的观众声音。但手动翻页查看效率太低于是决定用Python写个迷你爬虫快速抓取这些数据。这个12行代码的迷你爬虫核心价值在于极简实现仅用requests正则表达式两个基础库快速验证无需复杂环境配置适合临时数据采集需求教学示范展示最基础的网页抓取逻辑注意实际生产环境建议遵守robots.txt规则并控制请求频率避免对目标服务器造成压力。本文示例仅用于技术学习。2. 技术选型与工具准备2.1 为什么选择requests正则组合传统爬虫教程多推荐BeautifulSoup或lxml解析HTML但对于简单的短评抓取正则表达式反而更轻量import re pattern re.compile(rspan classshort(.*?)/span)相比DOM解析器正则的优势在于零额外依赖Python内置re模块执行效率高直接文本匹配比构建DOM树更快代码简洁单行模式匹配替代多行节点遍历2.2 环境配置要点确保你的Python环境已安装requests库pip install requests实测环境兼容性Python 3.6均可运行Windows/macOS/Linux全平台支持无需虚拟环境但建议用venv隔离3. 核心代码逐行解析完整代码如下含详细注释import requests, re url https://movie.douban.com/subject/6390825/comments?limit20 headers {User-Agent: Mozilla/5.0} # ① 伪装浏览器请求 resp requests.get(url, headersheaders) # ② 发送HTTP请求 html resp.text # ③ 获取网页源码 comments re.findall(rspan classshort(.*?)/span, html) # ④ 正则提取 for i, comment in enumerate(comments[:10]): # ⑤ 打印前10条 print(f{i1}. {comment.strip()}) # ⑥ 格式化输出关键点解析请求头设置豆瓣会拦截无User-Agent的请求模拟浏览器访问是必须的URL构造通过修改limit20参数可调整每页获取数量最大100异常处理生产环境应添加try-catch处理网络异常示例省略了这部分正则优化.*?非贪婪匹配确保准确获取标签间内容4. 实战中的问题与解决方案4.1 反爬机制应对策略测试时可能遇到以下情况requests.exceptions.HTTPError: 429 Too Many Requests解决方案添加随机延迟import time, random time.sleep(random.uniform(1, 3)) # 随机等待1-3秒使用代理IP池进阶方案proxies {http: http://proxy_ip:port} requests.get(url, proxiesproxies)4.2 数据清洗技巧原始数据可能包含HTML实体编码如 多余空白字符表情符号/特殊字符清洗函数示例import html def clean_text(text): text html.unescape(text) # 转换HTML实体 text .join(text.split()) # 合并连续空白 return text.strip()5. 数据存储与扩展应用5.1 基础存储方案将结果保存到CSVimport 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])5.2 情感分析扩展结合SnowNLP进行简单情感分析from snownlp import SnowNLP sentiments [SnowNLP(c).sentiments for c in comments] avg_score sum(sentiments)/len(sentiments) print(f平均情感得分{avg_score:.2f}) # 1为积极0为消极6. 法律与伦理边界6.1 robots.txt检查访问 https://www.douban.com/robots.txt 可见关键限制User-agent: * Disallow: /subject_search Disallow: /amazon_search Disallow: /search合规要点避免频繁请求建议≥5秒/次不爬取用户隐私数据商业用途需获得授权6.2 数据使用建议合法使用场景包括个人影评分析学术研究非商业的统计可视化我在实际使用中发现通过控制请求频率如每10分钟抓取一次既能满足数据分析需求又不会对服务器造成负担。对于需要大规模数据的情况建议联系豆瓣官方获取API权限。