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

admin2个月前API系列87

一、前言

在电商数据采集场景中,唯品会作为知名平台,其商品数据的结构化采集具有重要应用价值(如市场分析、竞品监控等)。本文将基于 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 开发者工具抓包分析最新请求结构,或留言交流解决方案。技术研究的核心是尊重平台规则,共同维护网络生态~


相关文章

主流电商平台 API 横向测评:淘宝、京东、拼多多接口能力与对接成本分析

主流电商平台 API 横向测评:淘宝、京东、拼多多接口能力与对接成本分析

 编辑引言:随着电商数字化转型的深入,越来越多企业(品牌方、第三方工具开发商、服务商)需要通过对接电商平台API,实现商品管理、订单同步、库存联动、物流追踪等核心业务场景。目前淘宝开放平台(...

高并发API请求技术实践与优化指南

在分布式系统、微服务架构、大数据采集等场景中,高并发API请求是核心技术难题之一。高并发API请求的核心目标是在单位时间内高效处理大量请求,同时保证系统的稳定性、响应速度与数据一致性。本文将从核心挑战...

大麦网API实战指南:关键字搜索与详情数据获取全解析

大麦网API实战指南:关键字搜索与详情数据获取全解析

 编辑在票务数据采集、演出信息监控等开发场景中,大麦网作为国内领先的演出票务平台,其数据接口具有极高的应用价值。但需明确的是,大麦网未正式开放公共API,当前开发者使用的接口均来自移动端/网...

Python爬虫入门实战:从零开始爬取网页数据(附完整代码)

在数据驱动的时代,爬虫技术作为获取网络公开数据的重要手段,被广泛应用于数据分析、舆情监控、学术研究等领域。对于刚接触爬虫的开发者而言,Python凭借其简洁的语法和丰富的第三方库,成为入门爬虫技术的首...

Python电商平台数据分析实战:从数据提取到业务决策(附完整代码)

在电商行业竞争日趋激烈的当下,数据分析已成为企业优化运营策略、提升用户体验、驱动业务增长的核心引擎。从用户行为轨迹到商品销量波动,从订单成交数据到库存周转情况,每一份数据背后都隐藏着影响业务决策的关键...

API技术:商品详情图片的抓取与上传

API技术:商品详情图片的抓取与上传

在电商数据整合、商品信息迁移、竞品分析等业务场景中,商品详情图片的抓取与上传是高频核心需求。API(应用程序编程接口)作为不同系统间数据交互的桥梁,为该需求提供了高效、可控的技术实现路径。本文将从技术...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。