×

VVIC 平台根据商品链接解析商品详情接口实践

Ace Ace 发表于2026-10-12 15:17:01 浏览15 评论0

抢沙发发表评论

前言

在服饰供应链采集场景中,很多方案习惯用商品 ID 请求 VVIC 详情接口,但业务侧经常只有前端商品链接,需要先从 URL 提取唯一标识再拉取数据。本文不再单纯演示基础请求调用,重点实现链接自动解析 + 异常 URL 容错 + 多规格数据扁平化,解决链接格式多变、SKU 数组嵌套、图片地址加密等线上痛点,代码增加重试与字段过滤,适合批量爬虫、供应链数据同步场景。

前置准备

  1. 依赖:requests 库,用于 HTTP 请求

  2. 权限说明:接口调用需携带合法请求头,模拟客户端访问,高频请求建议增加延时,避免触发风控

  3. 输入:VVIC 商品详情页 URL,自动提取商品编号,无需手动截取 ID

点击获取key和secret

完整代码示例

import re
import requests
import time

class VvicDetailByUrl:
    def __init__(self):
        self.session = requests.Session()
        self.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",
            "Accept": "application/json, text/plain, */*",
            "Referer": "https://www.vvic.com/"
        }
        self.retry_times = 2

    # 从商品url中提取商品id
    def parse_goods_id(self, goods_url):
        pattern = r'goods/(\d+)'
        res = re.search(pattern, goods_url)
        if res:
            return res.group(1)
        return None

    # 获取商品详情
    def get_detail(self, goods_url):
        goods_id = self.parse_goods_id(goods_url)
        if not goods_id:
            return {"code": -1, "msg": "URL解析失败,无法提取商品ID"}
        api_url = f"https://www.vvic.com/api/goods/detail?goodsId={goods_id}"
        for i in range(self.retry_times):
            try:
                resp = self.session.get(api_url, headers=self.headers, timeout=10)
                if resp.status_code == 200:
                    data = resp.json()
                    return self.format_data(data)
                time.sleep(0.8)
            except Exception as e:
                print(f"请求异常,重试{i+1}:{str(e)}")
                time.sleep(1)
        return {"code": -2, "msg": "接口请求多次失败"}

    # 数据扁平化清洗,提取业务核心字段
    def format_data(self, raw):
        if raw.get("code") != 0:
            return raw
        item = raw["data"]
        sku_list = []
        for sku in item.get("skuList", []):
            sku_list.append({
                "spec_name": sku.get("specName"),
                "price": sku.get("price"),
                "stock": sku.get("stockNum")
            })
        result = {
            "goods_name": item.get("goodsName"),
            "goods_id": item.get("goodsId"),
            "main_images": item.get("mainImages"),
            "desc_images": item.get("descImages"),
            "category_name": item.get("categoryName"),
            "min_price": item.get("minPrice"),
            "total_stock": item.get("totalStock"),
            "sku_info": sku_list
        }
        return {"code": 0, "data": result}

if __name__ == '__main__':
    client = VvicDetailByUrl()
    url = "https://www.vvic.com/goods/123456"
    ret = client.get_detail(url)
    print(ret)

核心逻辑解读


  1. URL 解析模块:正则表达式自动提取 goodsId,兼容带参数、末尾斜杠等多种不规则链接,省去人工截取。

  2. 会话复用:使用 Session 保持 cookie,减少握手开销,批量采集场景性能更优。

  3. 数据扁平化处理:原始返回 SKU 为嵌套数组,清洗后转为简易列表,方便直接入库。

群贤毕至

访客