欢迎光临
我们一直在努力

基于Python的淘宝评论爬虫

基于 Python 实现的淘宝商品评论爬虫,核心目标是爬取指定淘宝商品的评论数据(评论内容、评分、买家昵称、评论时间等),并保证代码可运行、易理解,同时适配淘宝的反爬机制。

实现思路

  • 接口分析:淘宝评论数据通过 Ajax 异步加载,可通过抓包获取评论接口(淘宝评论接口需携带 _ksTS、callback 等动态参数,核心依赖商品 ID 和页码);
  • 请求构造:模拟浏览器请求头,添加 Cookie(需手动登录获取)、User-Agent 等关键参数,绕过基础反爬;
  • 数据解析:处理返回的 JSONP 格式数据,提取核心评论字段;
  • 数据保存:将爬取结果保存为 CSV 文件,方便后续分析;
  • 异常处理:添加请求超时、数据解析失败等异常捕获,保证爬虫稳定性;
  • 反爬适配:添加随机延时,避免请求频率过高导致账号 / IP 被限制。
  • 前置准备

  • 安装依赖库:
  • pip install requests json5 pandas

  • 获取淘宝 Cookie:
    • 打开淘宝商品页,登录账号;
    • 按 F12 打开开发者工具 → 切换到「网络」标签 → 刷新页面,筛选「XHR」请求;
    • 找到任意评论相关请求,复制其「Cookie」字段(完整复制,这是爬虫能正常请求的核心)。
  • 完整代码

    import requests
    import json5
    import csv
    import time
    import random
    from urllib.parse import urlencode

    # ————————– 配置项 ————————–
    ITEM_ID = "690907351225" # 淘宝商品ID(从商品链接中提取)
    PAGE_NUM = 5 # 要爬取的评论页数(淘宝单页20条评论)
    CSV_FILE = "taobao_comments.csv" # 保存评论的CSV文件名
    # 替换为你自己的淘宝Cookie(必须!否则请求会被拦截)
    COOKIE = "你的淘宝Cookie,完整复制"

    # ————————– 请求头配置 ————————–
    HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Cookie": COOKIE,
    "Referer": f"https://item.taobao.com/item.htm?id={ITEM_ID}",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "X-Requested-With": "XMLHttpRequest",
    "Connection": "keep-alive"
    }

    def get_taobao_comments(item_id, page):
    """
    获取单页淘宝评论数据
    :param item_id: 商品ID
    :param page: 页码
    :return: 评论列表(字典格式)
    """
    # 构造动态参数(_ksTS 是时间戳+随机数,callback 是固定格式)
    timestamp = str(int(time.time() * 1000))
    random_str = str(random.randint(100, 999))
    _ksTS = f"{timestamp}_{random_str}"
    callback = f"jsonp{random.randint(100000, 999999)}"

    # 淘宝评论接口参数
    params = {
    "callback": callback,
    "ajax": "true",
    "m": "customized",
    "platelet": "true",
    "productId": item_id,
    "page": page,
    "pageSize": 20,
    "rateType": "", # 空=全部评论,1=好评,2=中评,3=差评
    "orderType": "sort_weight", # sort_weight=综合排序,create=最新排序
    "showContent": "true",
    "_ksTS": _ksTS,
    "defaultSearch": "ppctag",
    "isInner": "false"
    }

    # 评论接口URL
    url = f"https://rate.taobao.com/feedRateList.htm?{urlencode(params)}"

    try:
    # 发送请求(添加超时控制)
    response = requests.get(url, headers=HEADERS, timeout=15)
    response.raise_for_status() # 抛出HTTP错误(如403/500)

    # 处理JSONP数据:去掉回调函数包裹,提取核心JSON
    json_data_str = response.text.lstrip(f"{callback}(").rstrip(");")
    # 使用json5解析(兼容淘宝返回的非标准JSON)
    data = json5.loads(json_data_str)

    # 提取评论数据
    comments = []
    if "comments" in data and data["comments"]:
    for comment in data["comments"]:
    comment_info = {
    "买家昵称": comment.get("nick", ""),
    "评论内容": comment.get("content", "").replace("\\n", "").strip(),
    "评分": comment.get("rate", 0),
    "评论时间": comment.get("date", ""),
    "点赞数": comment.get("useful", 0),
    "追评内容": comment.get("appendComment", {}).get("content", "").replace("\\n", "").strip(),
    "追评时间": comment.get("appendComment", {}).get("date", "")
    }
    comments.append(comment_info)

    return comments

    except requests.exceptions.RequestException as e:
    print(f"第{page}页请求失败:{e}")
    return []
    except json5.JSON5DecodeError as e:
    print(f"第{page}页数据解析失败(可能Cookie过期):{e}")
    return []
    except Exception as e:
    print(f"第{page}页未知错误:{e}")
    return []

    def save_to_csv(comments, file_path):
    """
    将评论数据保存为CSV文件(UTF-8编码,避免中文乱码)
    """
    if not comments:
    return

    # 表头(与评论字典的key对应)
    headers = ["买家昵称", "评论内容", "评分", "评论时间", "点赞数", "追评内容", "追评时间"]

    # 追加模式写入,避免覆盖
    with open(file_path, "a", encoding="utf-8-sig", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=headers)
    # 若文件为空,先写表头
    if f.tell() == 0:
    writer.writeheader()
    writer.writerows(comments)

    if __name__ == "__main__":
    print(f"开始爬取淘宝商品{ITEM_ID}的评论,共{PAGE_NUM}页…")

    # 清空原有CSV文件(可选)
    with open(CSV_FILE, "w", encoding="utf-8-sig", newline="") as f:
    pass

    total = 0
    for page in range(1, PAGE_NUM + 1):
    print(f"正在爬取第{page}页…")
    comments = get_taobao_comments(ITEM_ID, page)

    if comments:
    save_to_csv(comments, CSV_FILE)
    total += len(comments)
    print(f"第{page}页爬取成功,共{len(comments)}条评论")
    else:
    print(f"第{page}页无有效评论(可能Cookie过期/页数超限)")

    # 随机延时2-5秒,避免请求过快被封
    time.sleep(random.uniform(2, 5))

    print(f"\\n爬取完成!共获取{total}条评论,已保存至 {CSV_FILE}")

    代码关键说明

  • 商品 ID 获取:淘宝商品链接格式为 https://item.taobao.com/item.htm?id=690907351225,其中 690907351225 就是商品 ID。
  • Cookie 重要性:淘宝评论接口必须携带登录后的 Cookie,否则会返回 403 / 登录提示,Cookie 有效期约 1-3 天,过期后需重新复制。
  • 核心参数解析:
    • rateType:控制评论类型(空 = 全部、1 = 好评、2 = 中评、3 = 差评);
    • orderType:sort_weight= 综合排序,create= 最新评论;
    • _ksTS:动态时间戳 + 随机数,是淘宝反爬的基础参数,需实时生成。
  • 数据解析:淘宝返回的是 JSONP 格式(带回调函数),且部分字段是非标准 JSON(如末尾逗号),因此用 json5 库解析更稳定。
  • 反爬注意:
    • 单次爬取页数建议不超过 20 页,避免触发风控;
    • 延时设置为 2-5 秒,不要缩短;
    • 若出现「登录验证」提示,需手动登录淘宝后重新复制 Cookie。
  • 常见问题解决

  • Cookie 过期:重新登录淘宝,复制最新的 Cookie 替换配置项;
  • 403 Forbidden:检查 User-Agent、Referer 是否正确,或 IP 被限制(换网络 / 使用代理);
  • 数据为空:确认商品 ID 正确,或该商品评论页数不足设置的 PAGE_NUM。
  • 总结

  • 该爬虫核心依赖登录后的 Cookie,是突破淘宝反爬的关键;
  • 通过解析淘宝官方评论接口,高效获取评论数据并保存为 CSV;
  • 仅可用于学习和个人数据分析,禁止商用(淘宝平台禁止未经授权爬取数据);
  • 若需爬取多商品 / 大量数据,建议添加代理 IP 池、Cookie 池等进阶反爬适配。
  • 赞(0)
    未经允许不得转载:171主机测评 » 基于Python的淘宝评论爬虫
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址