唯品会商品采集功能实现:关键字搜索商品列表API|获取商品详情数据API请求实例分享

一、前言

在电商数据采集场景中,唯品会作为知名平台,其商品数据的结构化采集具有重要应用价值(如市场分析、竞品监控等)。本文将基于 HTTP 请求原理,分享关键字搜索商品列表获取商品详情数据的 API 请求实现方案,全程使用 Python+requests 库开发,兼顾实用性和可扩展性。

🔒 重要声明:本文内容仅用于技术研究与学习,采集数据需遵守唯品会《用户协议》及 robots.txt 规则,不得用于商业用途或恶意爬取,否则后果自负。

二、准备工作

2.1 开发环境
  • 编程语言:Python 3.7+
  • 核心库:requests(发送 HTTP 请求)、json(解析响应数据)
  • 辅助工具:Postman(API 调试)、Chrome 开发者工具(抓包分析)
  • 安装依赖:

pip install requests

2.2 关键前置知识
  • 唯品会 API 为HTTP 接口,需通过抓包获取真实请求地址、请求头、参数格式(直接猜测易触发反爬)
  • 核心反爬应对:设置合理的 User-Agent、Referer,控制请求频率(建议 1-2 秒 / 次)
  • 响应数据格式:均为 JSON,可直接解析提取字段

三、关键字搜索商品列表 API 实现

3.1 接口分析(抓包结果示例)

通过 Chrome 开发者工具(F12)抓包搜索行为,得到核心请求信息:

  • 请求方式:GET
  • 核心参数:

参数名

说明

示例值

keyword

搜索关键字

羽绒服

page

页码(从 1 开始)

1

pageSize

每页商品数量

20

app_name

固定值(抓包获取)

vipmobile_client

client

设备类型

ios/android

version

APP 版本号

9.9.90

  • 请求头(必填,模拟真实设备):

headers = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 VIP/9.9.90",

"Referer": "https://m.vip.com/",

"Accept": "application/json, text/plain, */*",

"Content-Type": "application/json;charset=utf-8"

}

3.2 代码实现(搜索商品列表)

import requests

import json

import time

def search_vip_products(keyword, page=1, page_size=20):

"""

关键字搜索唯品会商品列表

:param keyword: 搜索关键字

:param page: 页码

:param page_size: 每页数量

:return: 结构化商品列表

"""

# 接口URL(抓包获取最新地址,可能会动态变化)

url = "https://m.vip.com/vips-mobile/rest/search/suggest"

# 请求参数

params = {

"keyword": keyword,

"page": page,

"pageSize": page_size,

"app_name": "vipmobile_client",

"client": "ios",

"version": "9.9.90",

"format": "json"

}

# 请求头(模拟移动端)

headers = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 VIP/9.9.90",

"Referer": "https://m.vip.com/",

"Accept": "application/json, text/plain, */*"

}

try:

# 发送GET请求(超时设置10秒,避免卡死)

response = requests.get(

url=url,

params=params,

headers=headers,

timeout=10,

verify=False # 忽略SSL证书验证(部分环境需开启)

)

# 响应状态码判断

if response.status_code == 200:

result = response.json()

# 提取核心商品数据(根据实际响应结构调整字段)

products = []

if result.get("data") and result["data"].get("products"):

for item in result["data"]["products"]:

product_info = {

"商品ID": item.get("productId", ""),

"商品名称": item.get("productName", ""),

"品牌名称": item.get("brandName", ""),

"原价": item.get("originalPrice", 0),

"折扣价": item.get("salePrice", 0),

"折扣率": item.get("discount", ""),

"商品图片": item.get("picUrl", ""),

"商品链接": f"https://m.vip.com/detail-{item.get('productId', '')}.html"

}

products.append(product_info)

print(f"第{page}页采集完成,共{len(products)}件商品")

return products

else:

print(f"请求失败,状态码:{response.status_code}")

return []

except Exception as e:

print(f"搜索商品列表异常:{str(e)}")

return []

# 测试:搜索"羽绒服"第1页商品

if __name__ == "__main__":

keyword = "羽绒服"

product_list = search_vip_products(keyword, page=1)

print(json.dumps(product_list, ensure_ascii=False, indent=2))

3.3 分页处理扩展

若需采集多页数据,可添加循环逻辑:

 

def batch_search_products(keyword, total_pages=3):

"""批量采集多页商品"""

all_products = []

for page in range(1, total_pages + 1):

products = search_vip_products(keyword, page=page)

if not products:

break # 无数据则停止分页

all_products.extend(products)

time.sleep(1.5) # 间隔1.5秒,避免反爬

print(f"批量采集完成,共{len(all_products)}件商品")

return all_products

# 测试批量采集3页

batch_products = batch_search_products("羽绒服", total_pages=3)

四、获取商品详情数据 API 实现

4.1 接口分析(基于商品 ID)

通过商品 ID 请求详情接口,抓包核心信息:

  • 请求方式:GET
  • 核心参数:

参数名

说明

示例值

productId

商品 ID(从列表接口获取)

123456789

app_name

固定值

vipmobile_client

client

设备类型

ios

4.2 代码实现(获取商品详情)

def get_product_detail(product_id):

"""

根据商品ID获取详情数据

:param product_id: 商品ID

:return: 商品详情字典

"""

url = "https://m.vip.com/vips-mobile/rest/product/detail"

params = {

"productId": product_id,

"app_name": "vipmobile_client",

"client": "ios",

"version": "9.9.90",

"format": "json"

}

headers = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 VIP/9.9.90",

"Referer": f"https://m.vip.com/detail-{product_id}.html",

"Accept": "application/json, text/plain, */*"

}

try:

response = requests.get(

url=url,

params=params,

headers=headers,

timeout=10,

verify=False

)

if response.status_code == 200:

result = response.json()

detail_data = result.get("data", {})

# 提取详细字段(规格、库存、详情描述等)

product_detail = {

"商品ID": detail_data.get("productId", ""),

"商品名称": detail_data.get("productName", ""),

"品牌ID": detail_data.get("brandId", ""),

"品牌名称": detail_data.get("brandName", ""),

"原价": detail_data.get("originalPrice", 0),

"折扣价": detail_data.get("salePrice", 0),

"库存状态": detail_data.get("stockStatus", ""), # 有货/无货

"商品规格": [spec.get("specValue") for spec in detail_data.get("specs", [])], # 颜色、尺码等

"商品卖点": detail_data.get("sellingPoints", ""),

"详情描述": detail_data.get("description", ""),

"售后服务": detail_data.get("afterService", ""),

"产地": detail_data.get("productionPlace", "")

}

return product_detail

else:

print(f"获取详情失败,商品ID:{product_id},状态码:{response.status_code}")

return {}

except Exception as e:

print(f"获取商品详情异常:{str(e)}")

return {}

# 测试:获取某个商品的详情(使用列表接口返回的商品ID)

if __name__ == "__main__":

product_id = "123456789" # 替换为真实商品ID

detail = get_product_detail(product_id)

print(json.dumps(detail, ensure_ascii=False, indent=2))

五、核心注意事项(避坑指南)

5.1 反爬应对策略
  1. 请求头伪装:必须携带真实的 User-Agent(移动端优先),Referer 需与请求 URL 匹配
  1. 请求频率控制:单次请求间隔≥1 秒,批量采集建议使用代理 IP 池(避免 IP 被封)
  1. 接口动态变化:唯品会 API 地址 / 参数可能定期更新,需重新抓包更新代码
  1. Cookie 处理:若出现 403 错误,可添加抓包获取的 Cookie(放入 headers 中)
5.2 合规性要求
  1. 禁止高频次、大规模爬取,避免对平台服务器造成压力
  1. 采集数据仅用于学习,不得泄露、售卖或用于商业竞争
  1. 遵守 robots.txt 规则(唯品会 robots.txt:https://www.vip.com/robots.txt
5.3 异常处理
  • 增加重试机制(如 requests.adapters.HTTPAdapter),应对网络波动
  • 对缺失字段设置默认值,避免解析 JSON 时报错
  • 定期验证接口可用性,及时更新请求参数 / URL

六、功能扩展建议

  1. 数据存储:将采集结果存入 MySQL、MongoDB 或 Excel(使用 pandas 库)
  1. 多线程 / 异步:使用 threading 或 aiohttp 提升采集效率(注意控制并发数)
  1. 代理 IP 池:对接阿布云、芝麻代理等服务,解决 IP 封禁问题
  1. 字段扩展:根据需求提取更多字段(如评论数、销量、用户评分等)

七、总结

本文通过实际抓包分析 + 代码实现,完成了唯品会商品采集的核心流程:关键字搜索商品列表→获取商品详情。关键在于准确模拟真实请求合规采集,开发者可根据实际需求调整参数、扩展功能。

若遇到接口更新、反爬加强等问题,建议重新通过 Chrome 开发者工具抓包分析最新请求结构,或留言交流解决方案。技术研究的核心是尊重平台规则,共同维护网络生态~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值