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

admin7天前API系列25

一、前言

在电商数据采集场景中,唯品会作为知名平台,其商品数据的结构化采集具有重要应用价值(如市场分析、竞品监控等)。本文将基于 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(应用程序编程接口)作为连接电商平台数据层与业务分析层的核心桥梁,正成为实现实时、精准市场洞察的关...

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)在电商行业,爬虫是获取市场数据(竞品价格、用户评价、库存变化)的核心工具,但电商平台的反爬机制、动态数据结构、海量数据处理及合规风险,往往让...

借助API搭建反向海淘系统:自动对接淘宝京东1688万亿商品的技术实现

借助API搭建反向海淘系统:自动对接淘宝京东1688万亿商品的技术实现

 编辑引言在全球化与互联网技术深度融合的当下,跨境电商购物模式持续创新。反向海淘,这一海外消费者从中国电商平台选购商品并通过跨境物流送达海外的模式,愈发受到青睐。为达成这一模式的高效运作,搭...

给产品新人的技术课:什么是 API

给产品新人的技术课:什么是 API

关键认知:API 不是技术团队的“黑话”,而是产品能力的连接器。理解它能帮你更精准定义需求,评估实现路径,最终打造出体验流畅、成本可控的产品。一、API 的本质:软件世界的“服务员”想象你在餐厅点餐:...

孔夫子旧书网API分享:关键字搜索在售商品、已售商品

孔夫子旧书网API分享:关键字搜索在售商品、已售商品

item_search-根剧关键字获取在售商品item_search_sold-根剧关键字获取已售商品通过传入商品标识号,即可搜索到此书当前在售和已经销售的数据。公共参数名称类型必须描述keyStri...

电商爬虫 API 开发者实战:15 分钟完成接口对接、调试与数据落地

前言:为什么需要第三方电商爬虫 API?**作为开发者,自行开发电商爬虫需面对反爬机制(验证码、IP 封禁)、数据清洗繁琐、多平台适配复杂等问题。第三方电商爬虫 API 已封装好采集、反爬、解析能力,...

发表评论    

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