尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python极简爬虫实战:12行代码获取豆瓣短评数据

Python极简爬虫实战:12行代码获取豆瓣短评数据
📅 发布时间:2026/7/18 2:38:52

1. 项目背景与核心思路

去年帮朋友做影视数据分析时,需要快速获取《黑豹》的豆瓣短评数据。传统爬虫教程往往从零开始搭建完整框架,但对于这种轻量级需求,其实用Python标准库+requests就能12行代码搞定。这种极简爬虫特别适合临时数据采集需求,无需复杂环境配置,直接上手就能跑通。

核心原理是利用requests模拟浏览器请求,通过豆瓣短评接口获取JSON数据。这里有个关键技巧:豆瓣对未登录用户只开放前20页短评(每页20条),而登录后可爬取更多数据。不过要注意频率控制,实测连续请求超过10次/分钟会触发429错误。

2. 环境准备与工具选型

2.1 基础环境配置

推荐使用Python 3.6+版本,主要依赖两个库:

pip install requests pip install pandas # 非必须,用于数据整理

选择requests库而非Scrapy等框架的原因:

  • 轻量级:无需创建完整爬虫项目
  • 学习成本低:API设计直观,适合新手
  • 调试方便:直接打印响应内容

2.2 接口分析技巧

通过Chrome开发者工具抓包发现:

  1. 短评接口格式:https://movie.douban.com/subject/[电影ID]/comments?start=[偏移量]&limit=20
  2. 《黑豹》电影ID:5360029
  3. 关键参数:
    • start:分页偏移量(0,20,40...)
    • limit:固定值20

注意:务必添加User-Agent头部,否则会返回403错误。实测可用的UA:'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'

3. 核心代码实现与解析

3.1 基础爬取代码

import requests headers = {'User-Agent': 'Mozilla/5.0'} comments = [] for i in range(0, 200, 20): # 爬10页数据 url = f'https://movie.douban.com/subject/5360029/comments?start={i}' resp = requests.get(url, headers=headers) comments.extend([item['content'] for item in resp.json()['comments']]) print(f'已获取第{i//20+1}页数据')

代码关键点解析:

  1. range(0, 200, 20):控制爬取页数(200=10页×20条)
  2. resp.json():自动解析JSON响应
  3. 列表推导式:快速提取评论内容

3.2 异常处理增强版

实际运行时会遇到各种异常,建议增加以下处理:

import time from random import uniform for i in range(0, 200, 20): try: resp = requests.get(url, headers=headers, timeout=10) resp.raise_for_status() # 检查HTTP错误 data = resp.json() if 'comments' not in data: print('可能触发反爬,尝试降低频率') break comments.extend([item['content'] for item in data['comments']]) time.sleep(uniform(0.5, 1.5)) # 随机延迟 except Exception as e: print(f'第{i//20+1}页出错:{str(e)}') break

4. 反爬机制与应对策略

4.1 豆瓣的反爬措施

  • 频率限制:单IP请求过快会返回429状态码
  • User-Agent验证:缺失或不常见的UA会被拦截
  • Cookie验证:部分接口需要携带登录态
  • 行为分析:连续规律请求可能触发验证码

4.2 合规爬取建议

  1. 遵守robots.txt规则:
    • 豆瓣允许爬取电影页面,但禁止商业用途
    • 建议间隔请求至少1秒以上
  2. 使用代理IP池(需自行搭建):
    proxies = {'http': 'http://your_proxy:port'} requests.get(url, proxies=proxies)
  3. 获取公开API权限:
    • 豆瓣开放平台提供正式API接口
    • 需要申请API Key并遵守调用限制

5. 数据存储与分析示例

5.1 存储到CSV文件

import pandas as pd df = pd.DataFrame({'comment': comments}) df.to_csv('black_panther_comments.csv', index=False, encoding='utf-8-sig')

5.2 简单词频分析

from collections import Counter import jieba # 中文分词库 text = ' '.join(comments) words = [w for w in jieba.cut(text) if len(w) > 1] # 过滤单字 word_counts = Counter(words).most_common(20) print('高频词Top20:', word_counts)

6. 常见问题排查指南

问题现象可能原因解决方案
返回403错误缺少User-Agent或Cookie添加合法UA头
返回429错误请求频率过高增加延迟或使用代理
JSON解析失败接口返回HTML验证页检查响应内容格式
数据缺失页面结构变更更新CSS选择器/XPath
连接超时网络问题或IP被封更换网络环境

7. 进阶优化方向

  1. 登录态保持:使用session对象保存cookies

    session = requests.Session() session.post(login_url, data=credentials) session.get(api_url) # 自动携带cookies
  2. 异步爬取提升效率:

    import aiohttp async with aiohttp.ClientSession() as session: async with session.get(url) as resp: data = await resp.json()
  3. 使用Selenium应对动态渲染:

    from selenium import webdriver driver = webdriver.Chrome() driver.get(url) comments = driver.find_elements_by_css_selector('.comment-item')

我在实际爬取时发现,工作日下午的请求成功率明显高于晚间高峰时段。建议在代码中添加自动重试机制,当连续3次请求失败后,暂停10分钟再继续。另外保存中间结果到文件也很重要,避免程序中断导致数据丢失。

相关新闻

  • EtherCAT总线在运动控制系统中的核心优势与应用
  • Minecraft光幕PV制作全流程解析:从光影渲染到后期合成
  • Android开发进阶:从基础到架构的系统化学习指南

最新新闻

  • ExtJS与Spring企业级应用开发实战指南
  • Jetpack Compose开发AndroidTV应用实战指南
  • 三电平电路原理、优势与应用解析
  • 无侵入式数据治理(上):为什么说数据治理最大的敌人,是业务改造
  • STM32定时器PWM实现多音电子琴Proteus仿真开发指南
  • 机器人自主探索:基于前沿检测的未知环境建图原理与实践

日新闻

  • 宝珀中国官方售后服务中心|官方热线和维修地址权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • # 2026年北京知识产权律师推荐怎么选?看这五点关键不踩雷 - 本地品牌推荐
  • 2026实测教程:生成的拼豆图纸不满意怎么修改才省事 - 省事研究所

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号