利用python爬虫获取淘宝天猫商品评论封装API实战演示

先展示一下爬虫成果

 

在电商数据分析、用户体验优化、竞品调研等场景中,商品评论数据是极具价值的信息来源。本文将通过实战演示,介绍如何使用 Python 爬虫技术获取淘宝 / 天猫商品评论,并将其封装为可调用的 API 接口,实现数据的高效获取与共享。

一、技术栈准备

核心工具与库

  • requests:HTTP 请求处理
  • BeautifulSoup:HTML 解析(备用,实际通过接口获取 JSON 数据)
  • Flask:轻量级 Web 框架,用于 API 开发
  • fake_useragent:生成随机 User-Agent,绕过简单反爬
  • pandas:数据清洗与结构化处理

反爬必备

  • 代理 IP 池(示例使用公开代理,生产环境建议使用付费代理)
  • Cookie 管理(保持用户会话状态)
  • 随机请求间隔(模拟真实用户行为)

二、爬虫核心逻辑实现

1. 分析评论接口

通过浏览器开发者工具(F12)抓包发现,淘宝 / 天猫商品评论通过以下接口加载:

https://rate.tmall.com/list_detail_rate.htm?itemId=商品ID&spuId=SPUID&sellerId=店铺ID&order=3&currentPage=页码&append=0&content=1&tagId=&posi=&picture=&groupId=&callback=jsonp100

关键参数:

  • itemId:商品 ID(从商品详情页 URL 获取,如商品详情中的123456)
  • currentPage:页码,从 1 开始

2. 构建请求头

模拟浏览器请求头,包含随机 User-Agent 和必要 Cookie(通过登录态获取,演示使用公共 Cookie):

from fake_useragent import UserAgent

def get_headers():

ua = UserAgent()

headers = {

"User-Agent": ua.random,

"Cookie": "your_cookie_here", # 需替换为有效Cookie(可通过浏览器登录后获取)

"Referer": "https://detail.tmall.com/item.htm",

"Host": "rate.tmall.com"

}

return headers

3. 评论数据抓取函数

处理分页请求并解析 JSON 数据,提取核心字段(评论内容、评分、用户昵称、评论时间等):

import requests

import json

def crawl_comments(item_id, page=1):

url = f"https://rate.tmall.com/list_detail_rate.htm?itemId={item_id}&currentPage={page}"

headers = get_headers()

response = requests.get(url, headers=headers, timeout=10)

# 去除JSONP回调前缀(如"jsonp100(")并解析

data = json.loads(response.text[9:-1])

comments = data["rateDetail"]["rateList"]

result = []

for comment in comments:

result.append({

"user": comment["displayUserNick"],

"score": comment["rateLevel"], # 评分(1-5分)

"content": comment["rateContent"],

"time": comment["rateDate"],

"images": [img["url"] for img in comment.get("picList", [])] # 评论图片

})

return result

三、封装 API 接口(Flask 实现)

1. 创建 API 服务

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/taobao/comments', methods=['GET'])

def get_comments():

item_id = request.args.get('item_id', type=str)

page = request.args.get('page', default=1, type=int)

if not item_id:

return jsonify({"error": "item_id is required"}), 400

try:

comments = crawl_comments(item_id, page)

return jsonify({

"status": "success",

"data": comments,

"page": page

})

except Exception as e:

return jsonify({"error": f"Request failed: {str(e)}"}), 500

if __name__ == '__main__':

app.run(host='0.0.0.0', port=5000, debug=True)

2. 接口调用示例

方式 1:HTTP 请求
 

curl "http://localhost:5000/taobao/comments?item_id=6234567890&page=1"

方式 2:Python 调用
 

import requests

url = "http://localhost:5000/taobao/comments"

params = {"item_id": "6234567890", "page": 1}

response = requests.get(url, params=params)

print(response.json())

3. 返回数据格式

 

{

"status": "success",

"data": [

{

"user": "用户昵称",

"score": 5,

"content": "商品质量很好,物流也很快!",

"time": "2023-10-01 15:30:00",

"images": ["http://example.com/image1.jpg", "http://example.com/image2.jpg"]

}

],

"page": 1

}

四、反爬与稳定性优化

1. 代理 IP 轮换

使用代理 IP 池(如requests-proxies库):

 

proxies = {

"http": "http://proxy.example.com:8080",

"https": "https://proxy.example.com:8080"

}

response = requests.get(url, headers=headers, proxies=proxies)

2. 随机请求间隔

避免高频请求触发反爬:

 

import time

import random

time.sleep(random.uniform(1, 3)) # 随机等待1-3秒

3. Cookie 管理

使用requests.Session保持会话状态,自动处理 Cookie:

 

session = requests.Session()

session.headers.update(get_headers())

五、合规性与注意事项

  1. 反爬限制:淘宝天猫反爬机制严格,建议:
    • 控制请求频率(每分钟不超过 10 次)
    • 使用真实浏览器环境(配合 Selenium/Playwright)
    • 购买商业级代理 IP(如阿布云、小象代理)
  1. 数据用途:仅限合法商业分析,禁止滥用或公开传播用户隐私信息
  1. 动态页面处理:若接口返回数据加密,需逆向分析加密参数(如sec_token)

六、扩展应用

  • 数据存储:将评论数据存入 MySQL/Elasticsearch,支持历史数据查询
  • 情感分析:结合 NLTK / 哈工大 LTP 进行评论情感极性判断
  • 可视化:通过 Grafana/Power BI 生成评论关键词云、评分分布图

通过以上步骤,我们成功实现了从淘宝天猫商品评论爬取到 API 封装的完整流程。实际应用中,需根据平台反爬策略动态调整爬虫逻辑,并始终遵守网站的开发者协议。技术演进方向可关注无头浏览器(Puppeteer)、分布式爬虫(Scrapy+Redis)和 AI 反反爬技术,提升数据获取的稳定性与效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值