You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取Backmarket网站AirPods的全部753条用户评论?

抓取Backmarket AirPods全部用户评论的解决方案

你遇到的问题是因为Backmarket的评论是动态加载的——初始页面只返回前10条评论,剩下的评论需要滚动页面时通过API请求逐步加载,而你的requests代码只能获取页面首次渲染的静态内容,自然拿不到全部数据。下面是具体解决方法:

核心思路

放弃直接抓取页面HTML,转而调用网站加载评论的后端API接口,通过分页请求获取所有评论数据。

步骤说明

  1. 找到评论API接口
    打开浏览器F12进入开发者工具,切换到「Network」标签,然后滚动评论区加载更多内容,找到类型为XHR的请求(通常URL里包含reviews字样)。比如AirPods评论的API接口格式大概是:

    https://www.backmarket.com/api/reviews?productFamilyId=345c3c05-8a7b-4d4d-ac21-518b12a0ec17&page={页码}&limit={每页条数}
    

    其中page是当前页码,limit是每页返回的评论数(默认10),响应是JSON格式,直接包含所有评论字段。

  2. 计算总页数
    API响应里会返回total字段(总评论数753),用总评论数 ÷ 每页条数向上取整就能得到总页数,比如753/10=76页。

  3. 循环请求所有分页
    编写循环,从page=1到总页数,依次请求每个页面的API,解析JSON提取需要的字段,最后合并成DataFrame。

完整代码示例

import pandas as pd
import requests
import time

# 评论API基础URL和固定参数
base_url = "https://www.backmarket.com/api/reviews"
params = {
    "productFamilyId": "345c3c05-8a7b-4d4d-ac21-518b12a0ec17",
    "limit": 10  # 每页10条,和网站默认一致
}

# 模拟浏览器请求头,避免被拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 先请求第一页,获取总评论数和总页数
response = requests.get(base_url, params=params, headers=headers)
data = response.json()
total_reviews = data["total"]
total_pages = (total_reviews + params["limit"] - 1) // params["limit"]  # 向上取整计算总页数

# 存储所有评论的列表
all_reviews = []

# 循环请求每一页
for page in range(1, total_pages + 1):
    params["page"] = page
    print(f"正在抓取第 {page}/{total_pages} 页...")
    
    try:
        response = requests.get(base_url, params=params, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
        page_data = response.json()
        
        # 提取每条评论的字段,和你原代码的字段对应
        for review in page_data["items"]:
            reviewer_info = review["reviewer"]
            all_reviews.append({
                "reviewers_name": reviewer_info["displayName"],
                "purchase_date": review["purchaseDate"],
                "country": reviewer_info["country"],
                "products": review["product"]["name"],
                "review": review["content"],
                "review_ratings": review["rating"]
            })
        
        time.sleep(1)  # 加1秒延时,避免请求太频繁被封
    except Exception as e:
        print(f"抓取第 {page} 页失败: {str(e)}")
        continue

# 转换成DataFrame
df = pd.DataFrame(all_reviews)
print(f"共抓取到 {len(df)} 条评论")
# 可以保存到CSV
# df.to_csv("backmarket_airpods_reviews.csv", index=False)

注意事项

  • 请求头模拟:一定要加User-Agent,否则网站可能直接拒绝请求
  • 请求频率控制:加适当的延时(比如1秒),避免触发反爬机制
  • 异常处理:代码里加入了异常捕获,避免某一页请求失败导致整个程序终止

内容的提问来源于stack exchange,提问作者Sharif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:05:02