侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用Python爬取动态加载的评论数据

2025-12-8 / 0 评论 / 4 阅读

题目

使用Python爬取动态加载的评论数据

信息

  • 类型:问答
  • 难度:⭐⭐

考点

动态网页爬取, AJAX请求分析, JSON数据处理

快速回答

实现步骤:

  1. 使用浏览器开发者工具分析AJAX请求
  2. 通过Requests库模拟真实请求头
  3. 构造分页参数获取JSON数据
  4. 解析JSON提取目标字段
  5. 添加异常处理和延时避免封禁
## 解析

问题场景

某电商网站商品评论数据通过AJAX动态加载,初始HTML中不包含评论内容。需爬取前5页评论的用户名、评分和内容。

核心步骤

1. 分析请求

在Chrome开发者工具中:

  • 打开Network面板 → 筛选XHR请求
  • 滚动页面触发评论加载,找到类似product_reviews?page=2的请求
  • 检查Request Headers中的User-AgentReferer
  • 查看Response数据结构(通常为JSON)

2. 代码实现

import requests
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'https://www.example.com/product/123'
}

for page in range(1, 6):
    try:
        # 构造带分页参数的URL
        url = f'https://api.example.com/reviews?product_id=123&page={page}'

        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 检查HTTP错误

        data = response.json()

        for review in data['reviews']:
            print(f"用户: {review['user_name']}")
            print(f"评分: {review['rating']}/5")
            print(f"内容: {review['content'][:50]}...\n")

        time.sleep(1.5)  # 请求间隔

    except requests.exceptions.RequestException as e:
        print(f"第{page}页请求失败: {e}")
    except KeyError:
        print(f"第{page}页JSON结构异常")

关键原理

  • 动态加载机制:现代网站常用JavaScript发起AJAX请求获取数据
  • JSON优势:相比解析HTML,直接处理JSON更高效稳定
  • 反爬策略:请求头模拟和延时可降低被封风险

最佳实践

  1. 始终添加User-AgentReferer头部
  2. 使用timeout参数防止请求阻塞
  3. 设置try-except捕获网络和解析异常
  4. 遵守robots.txt并控制请求频率(≥1秒/次)

常见错误

错误类型现象解决方案
未模拟请求头返回403禁止访问添加完整headers
忽略分页参数重复获取第一页数据分析URL/page参数规律
无异常处理网络波动导致程序崩溃添加try-except块

扩展知识

  • 高级反爬:当遇到验证码时需使用Selenium或Playwright
  • 数据存储:可结合SQLite/MongoDB持久化数据
  • 效率优化:使用aiohttp实现异步请求提升速度
  • 法律风险:避免爬取个人隐私数据,遵守网站条款