91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

5 大主流電商商品詳情解析實(shí)戰(zhàn)手冊(cè):淘寶 / 京東 / 拼多多 / 1688 / 唯品會(huì)核心字段提取 + 反爬應(yīng)對(duì) + 代碼示例

鄧林 ? 來(lái)源:jf_63013664 ? 作者:jf_63013664 ? 2025-10-13 15:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在電商數(shù)據(jù)分析、競(jìng)品監(jiān)控、智能選品等場(chǎng)景中,商品詳情頁(yè)的核心數(shù)據(jù)(價(jià)格、SKU、庫(kù)存、供應(yīng)商信息等)是關(guān)鍵決策依據(jù)。但不同平臺(tái)的頁(yè)面結(jié)構(gòu)、數(shù)據(jù)加載方式及反爬機(jī)制差異顯著,直接影響數(shù)據(jù)獲取效率。本文針對(duì)淘寶、京東、拼多多、1688、唯品會(huì) 5 大主流平臺(tái),詳細(xì)拆解商品詳情頁(yè)的解析邏輯,包含完整字段提取代碼、平臺(tái)特性適配方案及反爬應(yīng)對(duì)策略,所有原解析邏輯均保留,同時(shí)補(bǔ)充實(shí)操細(xì)節(jié)與技術(shù)注解,幫開發(fā)者避開常見坑點(diǎn)。

一、淘寶商品詳情解析:應(yīng)對(duì)動(dòng)態(tài)渲染與字體加密

1. 頁(yè)面結(jié)構(gòu)核心特性(補(bǔ)充實(shí)操痛點(diǎn))

動(dòng)態(tài)渲染深度依賴 JS:商品 SKU、庫(kù)存、實(shí)時(shí)價(jià)格等數(shù)據(jù)并非頁(yè)面加載時(shí)直接返回,需等待前端 JS 異步請(qǐng)求(通常來(lái)自tmall.com或taobao.com的接口);

字體加密防爬常見:部分價(jià)格數(shù)字使用自定義字體文件(如woff格式)渲染,直接爬取會(huì)出現(xiàn)亂碼,需結(jié)合字體映射關(guān)系解密;

驗(yàn)證碼觸發(fā)閾值低:同一 IP 短時(shí)間內(nèi)請(qǐng)求超過(guò) 5 次即可能觸發(fā)滑塊驗(yàn)證,需嚴(yán)格控制請(qǐng)求頻率。

2. 核心字段解析(保留原代碼 + 補(bǔ)充注釋 + 異常處理)

python

運(yùn)行

import requests
import json
from bs4 import BeautifulSoup
import re
from typing import Dict, List, Optional
def parse_taobao_item(url: str) -> Optional[Dict]:
    """
    解析淘寶商品詳情頁(yè)核心字段
    :param url: 商品詳情頁(yè)URL(如https://item.taobao.com/item.htm?id=xxx)
    :return: 包含標(biāo)題、價(jià)格、SKU、店鋪信息的字典,失敗返回None
    """
    # 構(gòu)建請(qǐng)求頭:模擬Chrome瀏覽器,Referer需與商品域名一致
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
        'Referer': 'https://www.taobao.com',
        'Cookie': ''  # 可選:添加登錄態(tài)Cookie,可獲取更多非公開數(shù)據(jù)(如會(huì)員價(jià))
    }
    
    try:
        # 發(fā)送請(qǐng)求:超時(shí)設(shè)為10秒,應(yīng)對(duì)淘寶服務(wù)器響應(yīng)延遲
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 觸發(fā)HTTP錯(cuò)誤(如403、500)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 1. 提取商品標(biāo)題:淘寶標(biāo)題通常在h1標(biāo)簽,帶data-spm屬性
        title_tag = soup.select_one('h1[data-spm="1000983"]')
        title = title_tag.text.strip() if title_tag else "未獲取到標(biāo)題"
        
        # 2. 提取價(jià)格:處理字體加密(此處為基礎(chǔ)方案,復(fù)雜加密需解析字體文件)
        price_tag = soup.select_one('.tm-price')
        if not price_tag:
            return None  # 價(jià)格標(biāo)簽不存在,可能觸發(fā)反爬
        price_text = price_tag.text.strip()
        price_match = re.search(r'(d+.d+)', price_text)  # 匹配小數(shù)價(jià)格(如25.80)
        price = float(price_match.group(1)) if price_match else 0.0
        
        # 3. 提取SKU信息:從頁(yè)面內(nèi)嵌JS的skuMap中解析(動(dòng)態(tài)加載數(shù)據(jù))
        sku_info: List[Dict] = []
        sku_script = soup.find('script', string=re.compile('skuMap'))  # 查找含skuMap的腳本
        if sku_script:
            # 正則提取skuMap的JSON字符串(避免解析整個(gè)JS)
            sku_data_match = re.search(r'skuMaps*:s*({.*?})(?=,s*"skuId"|})', sku_script.string, re.DOTALL)
            if sku_data_match:
                try:
                    sku_json = json.loads(sku_data_match.group(1))
                    # 遍歷SKU,提取規(guī)格、價(jià)格、庫(kù)存
                    for sku_id, sku_detail in sku_json.items():
                        sku_info.append({
                            'sku_id': sku_id,
                            'properties': sku_detail.get('name', '未知規(guī)格'),  # 如"顏色分類:紅色"
                            'price': float(sku_detail.get('price', 0)),
                            'stock': int(sku_detail.get('stock', 0))  # 庫(kù)存為0表示無(wú)貨
                        })
                except json.JSONDecodeError:
                    print("SKU數(shù)據(jù)JSON解析失敗,可能頁(yè)面結(jié)構(gòu)變更")
        
        # 4. 提取店鋪信息:店鋪名稱通常在.slogo-shopname標(biāo)簽
        shop_name_tag = soup.select_one('.slogo-shopname')
        shop_name = shop_name_tag.text.strip() if shop_name_tag else "未獲取到店鋪名稱"
        
        return {
            'platform': '淘寶',
            'url': url,
            'title': title,
            'price': price,
            'sku_info': sku_info,
            'shop_name': shop_name,
            'parse_status': 'success'
        }
    
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求淘寶商品頁(yè)失?。簕str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}
    except Exception as e:
        print(f"解析淘寶商品頁(yè)異常:{str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}

二、京東商品詳情解析:依托清晰 API 簡(jiǎn)化提取

1. 頁(yè)面結(jié)構(gòu)核心特性(補(bǔ)充 API 優(yōu)勢(shì))

JSON 接口標(biāo)準(zhǔn)化:商品基礎(chǔ)信息、價(jià)格、SKU 均有獨(dú)立 API(如價(jià)格 API、SKU API),無(wú)需深度解析 HTML;

登錄態(tài)影響數(shù)據(jù)范圍:未登錄僅能獲取公開價(jià)格,登錄后可獲取會(huì)員價(jià)、優(yōu)惠券等專屬數(shù)據(jù);

評(píng)論數(shù)據(jù)分頁(yè)加載:商品評(píng)論需調(diào)用comment.jd.com的分頁(yè)接口,單次最多獲取 10 條。

2. 核心字段解析(保留原代碼 + 補(bǔ)充 API 說(shuō)明 + 登錄提示)

python

運(yùn)行

import requests
import json
from bs4 import BeautifulSoup
from typing import Dict, List, Optional
def parse_jd_item(item_id: str) -> Optional[Dict]:
    """
    解析京東商品詳情頁(yè)核心字段(基于官方API+頁(yè)面解析)
    :param item_id: 商品SKU ID(如100012345678,從商品URL中提?。?    :return: 包含標(biāo)題、價(jià)格、SKU的字典,失敗返回None
    """
    # 基礎(chǔ)配置:京東商品頁(yè)URL與API
    base_url = f"https://item.jd.com/{item_id}.html"
    price_api_url = f"https://p.3.cn/prices/mgets?skuIds=J_{item_id}"  # 價(jià)格API(無(wú)需登錄)
    sku_api_url = f"https://item-soa.jd.com/getWareBusiness?skuId={item_id}"  # SKU API
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
        'Referer': base_url,
        'Cookie': ''  # 建議添加登錄Cookie:可獲取會(huì)員價(jià)、庫(kù)存詳情
    }
    
    try:
        # 1. 提取商品標(biāo)題:從基礎(chǔ)商品頁(yè)HTML解析
        base_response = requests.get(base_url, headers=headers, timeout=8)
        base_response.raise_for_status()
        soup = BeautifulSoup(base_response.text, 'html.parser')
        title_tag = soup.select_one('.sku-name')  # 京東標(biāo)題標(biāo)簽固定為.sku-name
        title = title_tag.text.strip() if title_tag else "未獲取到標(biāo)題"
        
        # 2. 提取價(jià)格:調(diào)用京東官方價(jià)格API(比頁(yè)面解析更穩(wěn)定)
        price_response = requests.get(price_api_url, headers=headers, timeout=8)
        price_data = price_response.json()
        if not price_data:
            return None
        # 價(jià)格API返回列表,p為當(dāng)前價(jià),m為市場(chǎng)價(jià)
        current_price = float(price_data[0].get('p', 0))
        original_price = float(price_data[0].get('m', 0))
        
        # 3. 提取SKU信息:調(diào)用SKU專屬API(含規(guī)格、價(jià)格、庫(kù)存)
        sku_info: List[Dict] = []
        sku_response = requests.get(sku_api_url, headers=headers, timeout=8)
        sku_data = sku_response.json()
        
        # 解析SKU數(shù)據(jù)結(jié)構(gòu)(京東API返回格式較固定)
        ware_sku = sku_data.get('wareSku', {})
        if 'skus' in ware_sku:
            for sku in ware_sku['skus']:
                sku_info.append({
                    'sku_id': sku.get('skuId', ''),
                    'properties': sku.get('name', '未知規(guī)格'),  # 如"顏色:黑色;容量:128G"
                    'price': float(sku.get('price', 0)),
                    'stock_state': sku.get('stockState', 0),  # 0=無(wú)貨,3=有貨,4=預(yù)售
                    'stock_desc': '有貨' if sku.get('stockState') == 3 else '無(wú)貨/預(yù)售'
                })
        
        return {
            'platform': '京東',
            'item_id': item_id,
            'title': title,
            'current_price': current_price,
            'original_price': original_price,
            'sku_info': sku_info,
            'parse_status': 'success'
        }
    
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求京東接口失?。簕str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}
    except Exception as e:
        print(f"解析京東商品數(shù)據(jù)異常:{str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}

三、拼多多商品詳情解析:適配移動(dòng)端 API 與加密請(qǐng)求

1. 頁(yè)面結(jié)構(gòu)核心特性(補(bǔ)充移動(dòng)端適配要點(diǎn))

移動(dòng)端 API 為核心:PC 端頁(yè)面僅展示基礎(chǔ)信息,完整數(shù)據(jù)(如 SKU、銷量)需調(diào)用移動(dòng)端apiv3.pinduoduo.com接口;

請(qǐng)求參數(shù)加密頻繁:關(guān)鍵參數(shù)(如sign)需按拼多多算法生成,直接拼接參數(shù)會(huì)返回 403;

滑塊驗(yàn)證觸發(fā)嚴(yán)格:新 IP 或高頻請(qǐng)求(≥3 次 / 分鐘)必觸發(fā)滑塊,需結(jié)合 IP 代理與設(shè)備指紋。

2. 核心字段解析(保留原代碼 + 補(bǔ)充加密提示 + 銷量說(shuō)明)

python

運(yùn)行

import requests
import json
import time
import random
from typing import Dict, Optional, List
def parse_pinduoduo_item(item_id: str) -> Optional[Dict]:
    """
    解析拼多多商品詳情頁(yè)核心字段(基于移動(dòng)端API)
    :param item_id: 商品ID(如123456789,從移動(dòng)端URL提取:https://mobile.yangkeduo.com/goods.html?goods_id=xxx)
    :return: 包含標(biāo)題、價(jià)格、銷量、圖片的字典,失敗返回None
    """
    # 拼多多移動(dòng)端API(注意:實(shí)際使用需破解sign參數(shù)加密,此處為基礎(chǔ)示例)
    api_url = "https://apiv3.pinduoduo.com/api/item/get"
    
    # 構(gòu)建請(qǐng)求參數(shù):模擬移動(dòng)端請(qǐng)求,包含時(shí)間戳、隨機(jī)數(shù)
    params = {
        'item_id': item_id,
        'pdduid': int(time.time() * 1000),  # 模擬用戶唯一標(biāo)識(shí)(每次請(qǐng)求可變更)
        '_': int(time.time() * 1000),       # 時(shí)間戳(毫秒級(jí),防緩存)
        'random': round(random.random(), 16),  # 16位隨機(jī)數(shù),增加請(qǐng)求唯一性
        'sign': ''  # 關(guān)鍵:需按拼多多sign算法生成,否則接口返回403(需逆向JS獲取算法)
    }
    
    # 移動(dòng)端請(qǐng)求頭:必須模擬iPhone/Android設(shè)備,否則拒絕服務(wù)
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1',
        'Referer': f'https://mobile.yangkeduo.com/goods.html?goods_id={item_id}',
        'Origin': 'https://mobile.yangkeduo.com',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json, text/plain, */*'
    }
    
    try:
        # 發(fā)送請(qǐng)求:拼多多API響應(yīng)較快,超時(shí)設(shè)為5秒
        response = requests.get(api_url, params=params, headers=headers, timeout=5)
        response.raise_for_status()
        data = response.json()
        
        # 解析頂層數(shù)據(jù):API返回格式為{"item": {...}, "code": 0}
        if data.get('code') != 0:
            print(f"拼多多API返回錯(cuò)誤:{data.get('msg', '未知錯(cuò)誤')}")
            return None
        item_data = data.get('item', {})
        if not item_data:
            return None
        
        # 提取核心字段:注意拼多多價(jià)格單位為"分",需除以100
        title = item_data.get('goods_name', '未獲取到標(biāo)題')
        min_group_price = item_data.get('min_group_price', 0) / 100  # 最低拼團(tuán)價(jià)
        market_price = item_data.get('market_price', 0) / 100        # 市場(chǎng)價(jià)
        sales_tip = item_data.get('sales_tip', '0人已買')           # 銷量提示(如"10萬(wàn)+人已買")
        gallery = item_data.get('gallery', [])                      # 商品圖片列表
        images = [img.get('url', '') for img in gallery]            # 提取圖片URL
        goods_desc = item_data.get('goods_desc', '無(wú)商品描述')       # 商品簡(jiǎn)介
        
        # 提取SKU信息(若有)
        sku_info: List[Dict] = []
        sku_list = item_data.get('sku_list', [])
        for sku in sku_list:
            sku_info.append({
                'sku_id': sku.get('sku_id', ''),
                'properties': sku.get('spec', '未知規(guī)格'),  # 如"顏色:白色;尺寸:M"
                'price': sku.get('price', 0) / 100,
                'stock': sku.get('stock', 0)
            })
        
        return {
            'platform': '拼多多',
            'item_id': item_id,
            'title': title,
            'current_price': min_group_price,
            'original_price': market_price,
            'sales_tip': sales_tip,
            'images': images,
            'description': goods_desc,
            'sku_info': sku_info,
            'parse_status': 'success'
        }
    
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求拼多多API失?。簕str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}
    except Exception as e:
        print(f"解析拼多多商品數(shù)據(jù)異常:{str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}

四、1688 商品詳情解析:聚焦 B 端供應(yīng)商與批發(fā)屬性

1. 頁(yè)面結(jié)構(gòu)核心特性(補(bǔ)充 B 端數(shù)據(jù)重點(diǎn))

供應(yīng)商信息突出:頁(yè)面包含企業(yè)名稱、所在地、經(jīng)營(yíng)年限、認(rèn)證資質(zhì)等 B 端關(guān)鍵數(shù)據(jù);

SKU 支持混批規(guī)則:部分商品按 “起訂量”“混批折扣” 定價(jià),SKU 字段需額外提取批發(fā)屬性;

API 權(quán)限門檻高:企業(yè)級(jí)數(shù)據(jù)(如供應(yīng)商成交率)需申請(qǐng) 1688 開放平臺(tái)權(quán)限,個(gè)人開發(fā)者難獲取。

2. 核心字段解析(保留原代碼 + 補(bǔ)充批發(fā)屬性 + 供應(yīng)商資質(zhì))

python

運(yùn)行

import requests
import json
from bs4 import BeautifulSoup
import re
from typing import Dict, List, Optional
def parse_1688_item(item_id: str) -> Optional[Dict]:
    """
    解析1688商品詳情頁(yè)核心字段(含B端供應(yīng)商信息與批發(fā)屬性)
    :param item_id: 商品Offer ID(如688123456789,從URL提?。篽ttps://detail.1688.com/offer/xxx.html)
    :return: 包含商品信息、供應(yīng)商信息的字典,失敗返回None
    """
    item_url = f"https://detail.1688.com/offer/{item_id}.html"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
        'Referer': 'https://www.1688.com',
        'Cookie': ''  # 登錄后可獲取供應(yīng)商聯(lián)系方式、成交記錄
    }
    
    try:
        response = requests.get(item_url, headers=headers, timeout=10)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 1. 提取商品標(biāo)題:1688標(biāo)題標(biāo)簽為.d-title
        title_tag = soup.select_one('.d-title')
        title = title_tag.text.strip() if title_tag else "未獲取到標(biāo)題"
        
        # 2. 提取價(jià)格范圍:批發(fā)商品多為區(qū)間價(jià)(如"10.00-15.00元")
        price_range_tag = soup.select_one('.price-now')
        price_range = price_range_tag.text.strip() if price_range_tag else "未獲取到價(jià)格"
        
        # 3. 提取供應(yīng)商核心信息(B端重點(diǎn))
        company_name_tag = soup.select_one('.company-name')
        company_name = company_name_tag.text.strip() if company_name_tag else "未獲取到企業(yè)名稱"
        
        location_tag = soup.select_one('.location')
        location = location_tag.text.strip() if location_tag else "未獲取到所在地"
        
        # 補(bǔ)充:提取經(jīng)營(yíng)年限(部分頁(yè)面有,需按實(shí)際結(jié)構(gòu)調(diào)整)
        operate_years_tag = soup.select_one('.year')
        operate_years = operate_years_tag.text.strip() if operate_years_tag else "未公開"
        
        # 4. 提取SKU信息(含混批、起訂量等B端屬性)
        sku_info: List[Dict] = []
        sku_script = soup.find('script', string=re.compile('skuMap'))
        if sku_script:
            sku_data_match = re.search(r'skuMaps*:s*({.*?})(?=,s*"defSkuId"|})', sku_script.string, re.DOTALL)
            if sku_data_match:
                try:
                    sku_json = json.loads(sku_data_match.group(1))
                    for sku_id, sku_detail in sku_json.items():
                        sku_info.append({
                            'sku_id': sku_id,
                            'properties': sku_detail.get('name', '未知規(guī)格'),
                            'price': sku_detail.get('price', '0.00'),  # 可能為區(qū)間價(jià)(如"10-12")
                            'min_order': sku_detail.get('minOrderQuantity', 1),  # 最小起訂量
                            'available_quantity': sku_detail.get('availableQuantity', 0),  # 可售數(shù)量
                            'mix_batch': sku_detail.get('supportMix', False)  # 是否支持混批
                        })
                except json.JSONDecodeError:
                    print("1688 SKU數(shù)據(jù)JSON解析失敗")
        
        return {
            'platform': '1688',
            'item_id': item_id,
            'title': title,
            'price_range': price_range,
            'supplier_info': {
                'company_name': company_name,
                'location': location,
                'operate_years': operate_years
            },
            'sku_info': sku_info,
            'parse_status': 'success'
        }
    
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求1688商品頁(yè)失?。簕str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}
    except Exception as e:
        print(f"解析1688商品數(shù)據(jù)異常:{str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}

五、唯品會(huì)商品詳情解析:適配品牌特賣與限時(shí)活動(dòng)

1. 頁(yè)面結(jié)構(gòu)核心特性(補(bǔ)充限時(shí)活動(dòng)要點(diǎn))

品牌特賣數(shù)據(jù)為主:頁(yè)面突出品牌名稱、折扣力度,價(jià)格帶多為 “折后價(jià)”;

活動(dòng)時(shí)效性強(qiáng):商品庫(kù)存、價(jià)格每小時(shí)更新,解析后需標(biāo)注數(shù)據(jù)獲取時(shí)間;

PC 端功能簡(jiǎn)化:僅展示基礎(chǔ)信息,完整 SKU、活動(dòng)規(guī)則需解析移動(dòng)端頁(yè)面。

2. 核心字段解析(保留原代碼 + 補(bǔ)充時(shí)間標(biāo)注 + 折扣計(jì)算)

python

運(yùn)行

import requests
import json
import re
from typing import Dict, List, Optional
from datetime import datetime
def parse_vip_item(item_id: str) -> Optional[Dict]:
    """
    解析唯品會(huì)商品詳情頁(yè)核心字段(含品牌特賣、限時(shí)折扣信息)
    :param item_id: 商品ID(如1234567,從移動(dòng)端URL提取:https://m.vip.com/product-xxx.html)
    :return: 包含品牌、價(jià)格、折扣的字典,失敗返回None
    """
    mobile_url = f"https://m.vip.com/product-{item_id}.html"
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1',
        'Referer': 'https://m.vip.com/',
        'Accept': 'application/json, text/plain, */*'
    }
    
    try:
        response = requests.get(mobile_url, headers=headers, timeout=8)
        response.raise_for_status()
        html_content = response.text
        
        # 提取頁(yè)面內(nèi)嵌的商品JSON數(shù)據(jù):唯品會(huì)數(shù)據(jù)存于window.productInfo
        product_info_match = re.search(r'window.productInfos*=s*({.*?});', html_content, re.DOTALL)
        if not product_info_match:
            print("未找到唯品會(huì)商品JSON數(shù)據(jù),可能頁(yè)面結(jié)構(gòu)變更")
            return None
        
        # 解析JSON數(shù)據(jù)
        product_info = json.loads(product_info_match.group(1))
        product = product_info.get('product', {})
        if not product:
            return None
        
        # 提取核心字段
        title = product.get('name', '未獲取到標(biāo)題')
        brand_name = product.get('brandName', '未獲取到品牌')
        original_price = float(product.get('marketPrice', 0))  # 市場(chǎng)價(jià)
        current_price = float(product.get('salePrice', 0))      # 折后價(jià)
        discount = product.get('discount', '無(wú)折扣')            # 如"3.5折"
        
        # 補(bǔ)充:計(jì)算實(shí)際折扣率(驗(yàn)證頁(yè)面折扣是否準(zhǔn)確)
        discount_rate = round((current_price / original_price) * 10, 1) if original_price != 0 else 0.0
        
        # 提取商品圖片:detailImages為詳情圖列表
        detail_images = product.get('detailImages', [])
        images = [img.get('url', '') for img in detail_images]
        
        # 提取顏色選項(xiàng)
        color_options = [color.get('name', '') for color in product.get('colors', [])]
        
        # 提取活動(dòng)時(shí)間(限時(shí)特賣關(guān)鍵)
        activity_start = product.get('startTime', '')
        activity_end = product.get('endTime', '')
        
        return {
            'platform': '唯品會(huì)',
            'item_id': item_id,
            'title': title,
            'brand': brand_name,
            'original_price': original_price,
            'current_price': current_price,
            'discount': discount,
            'discount_rate': discount_rate,  # 實(shí)際折扣率(如3.5)
            'images': images,
            'color_options': color_options,
            'activity_time': {
                'start': activity_start,
                'end': activity_end
            },
            'data_fetch_time': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),  # 數(shù)據(jù)獲取時(shí)間
            'parse_status': 'success'
        }
    
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求唯品會(huì)商品頁(yè)失?。簕str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}
    except Exception as e:
        print(f"解析唯品會(huì)商品數(shù)據(jù)異常:{str(e)}")
        return {'parse_status': 'fail', 'error_msg': str(e)}

六、通用解析策略與注意事項(xiàng)(補(bǔ)充實(shí)操工具與方案)

1. 動(dòng)態(tài)內(nèi)容處理(補(bǔ)充工具選型建議)

JS 渲染工具對(duì)比

Selenium:適合 Python 開發(fā)者,支持可視化調(diào)試,缺點(diǎn)是占用資源多;

Puppeteer:Node.js 生態(tài)工具,渲染速度快,適合批量解析;

Playwright:微軟開源工具,支持多瀏覽器(Chrome/Firefox/Safari),兼容性優(yōu)于前兩者;

官方 API 優(yōu)先原則

淘寶:通過(guò)taobao.item_get接口(需申請(qǐng)開放平臺(tái)權(quán)限);

京東:調(diào)用jd.union.open.goods.detail.query接口(聯(lián)盟賬號(hào)可申請(qǐng));

優(yōu)勢(shì):數(shù)據(jù)準(zhǔn)確性 100%,無(wú)反爬風(fēng)險(xiǎn),更新頻率同步平臺(tái)。

2. 反爬應(yīng)對(duì)進(jìn)階方案(補(bǔ)充細(xì)節(jié)與工具推薦)

反爬類型 應(yīng)對(duì)方案 工具推薦
User-Agent 檢測(cè) 構(gòu)建多設(shè)備 UA 池(PC + 移動(dòng)端),每次請(qǐng)求隨機(jī)選擇,避免固定格式 開源 UA 池:user_agent Python 庫(kù)
IP 封鎖 使用住宅代理池(模擬真實(shí)用戶 IP),避免數(shù)據(jù)中心 IP;單 IP 請(qǐng)求間隔≥3 秒 Luminati(全球住宅 IP)、Oxylabs
Cookie 驗(yàn)證 維護(hù)登錄態(tài) Cookie 池,定期更新(如淘寶 Cookie 有效期約 7 天) Cookie 自動(dòng)刷新工具:CookieCloud
字體加密 解析字體文件的字符映射關(guān)系,將亂碼轉(zhuǎn)換為正常文字;或使用 OCR 識(shí)別價(jià)格圖片 Python 庫(kù):fonttools、pytesseract

3. 數(shù)據(jù)驗(yàn)證與質(zhì)量保障(補(bǔ)充具體案例)

字段格式驗(yàn)證

價(jià)格:使用正則r'^d+.d{2}$'確保為兩位小數(shù)(如 25.80,避免 100 或 25.8 等格式);

商品 ID:淘寶 ID 為 11-12 位數(shù)字,京東為 10-13 位數(shù)字,不符則標(biāo)記異常;

空值與異常處理

庫(kù)存為負(fù)數(shù)時(shí),自動(dòng)修正為 0;

價(jià)格為 0 時(shí),重新請(qǐng)求或標(biāo)記為 “數(shù)據(jù)異?!?;

數(shù)據(jù)時(shí)效性標(biāo)注

對(duì)唯品會(huì)、拼多多等限時(shí)活動(dòng)平臺(tái),必須記錄數(shù)據(jù)獲取時(shí)間,避免使用過(guò)期價(jià)格。

七、總結(jié)與平臺(tái)適配建議

不同電商平臺(tái)的解析難度與核心關(guān)注點(diǎn)差異顯著,建議根據(jù)業(yè)務(wù)場(chǎng)景優(yōu)先選擇適配方案:

C 端選品 / 競(jìng)品監(jiān)控:優(yōu)先解析淘寶、京東、拼多多,重點(diǎn)關(guān)注價(jià)格、銷量、SKU 庫(kù)存;

B 端供應(yīng)商篩選:聚焦 1688,提取企業(yè)資質(zhì)、起訂量、混批規(guī)則;

品牌折扣分析:主攻唯品會(huì),重點(diǎn)跟蹤折扣力度、活動(dòng)周期、品牌分布。

需注意:所有解析行為需遵守平臺(tái)robots.txt協(xié)議與《網(wǎng)絡(luò)安全法》,避免高頻爬取或獲取敏感數(shù)據(jù)(如用戶隱私、未公開商業(yè)數(shù)據(jù))。建議定期(每 1-2 個(gè)月)檢查平臺(tái)頁(yè)面結(jié)構(gòu),及時(shí)更新解析邏輯,應(yīng)對(duì)平臺(tái)反爬策略調(diào)整。

若在實(shí)際解析中遇到 “API 參數(shù)加密”“字體解密失敗”“滑塊驗(yàn)證突破” 等問(wèn)題,評(píng)論區(qū)留言具體場(chǎng)景,小編看到必回,分享實(shí)操解決方案!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2371

    瀏覽量

    66764
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    京東商品詳情API接口詳解:獲取商品標(biāo)題、價(jià)格、庫(kù)存等核心數(shù)據(jù)

    接口選型、參數(shù)、返回字段、接入流程、實(shí)戰(zhàn)場(chǎng)景做完整詳解。 一、核心接口選型(官方合規(guī)) 京東有兩套詳情接口體系,按業(yè)務(wù)場(chǎng)景選擇: 1.
    的頭像 發(fā)表于 03-02 14:28 ?187次閱讀

    亞馬遜商品詳情數(shù)據(jù)獲取實(shí)戰(zhàn):從商品鏈接提取 ID 到解析詳情

    亞馬遜商品詳情API是開發(fā)者獲取平臺(tái)上商品核心信息(如標(biāo)題、價(jià)格、圖片、描述、評(píng)價(jià)等)的官方技術(shù)接口,主要用于跨境電、比價(jià)工具、選品分析、
    的頭像 發(fā)表于 02-10 16:41 ?311次閱讀

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成 A
    的頭像 發(fā)表于 02-10 11:23 ?254次閱讀

    借助淘寶京東多多API,在電競(jìng)爭(zhēng)中三足鼎立!

    深入解析技術(shù)實(shí)現(xiàn)路徑。 一、API整合的核心價(jià)值 數(shù)據(jù)融合優(yōu)勢(shì) 淘寶API提供$10億+$商品數(shù)據(jù) 京東API支持$實(shí)時(shí)庫(kù)存同步$
    的頭像 發(fā)表于 12-22 14:20 ?229次閱讀
    借助<b class='flag-5'>淘寶</b><b class='flag-5'>京東</b><b class='flag-5'>拼</b><b class='flag-5'>多多</b>API,在電<b class='flag-5'>商</b>競(jìng)爭(zhēng)中三足鼎立!

    ???????淘寶京東多多API大剖析,為你的電之路保駕護(hù)航!

    ? ?在當(dāng)今電生態(tài)蓬勃發(fā)展的時(shí)代,高效、精準(zhǔn)地獲取和處理平臺(tái)數(shù)據(jù)已成為商家和技術(shù)開發(fā)者的核心競(jìng)爭(zhēng)力。淘寶京東、
    的頭像 發(fā)表于 12-22 14:14 ?615次閱讀
    ???????<b class='flag-5'>淘寶</b><b class='flag-5'>京東</b><b class='flag-5'>拼</b><b class='flag-5'>多多</b>API大剖析,為你的電<b class='flag-5'>商</b>之路保駕護(hù)航!

    解析淘寶京東、多多API:找到適合你的電發(fā)展之路!

    不可或缺的工具。本文旨在解析淘寶(天貓)、京東、多多三大主流平臺(tái)的API特性,幫助您找到最適合
    的頭像 發(fā)表于 12-17 15:35 ?389次閱讀
    <b class='flag-5'>解析</b><b class='flag-5'>淘寶</b>、<b class='flag-5'>京東</b>、<b class='flag-5'>拼</b><b class='flag-5'>多多</b>API:找到適合你的電<b class='flag-5'>商</b>發(fā)展之路!

    淘寶、京東多多API各顯神通,商家如何選擇?

    ? ?在電生態(tài)中,平臺(tái)提供的API接口如同商家的"數(shù)字武器庫(kù)",直接決定了系統(tǒng)對(duì)接效率與業(yè)務(wù)拓展能力。本文將從技術(shù)維度對(duì)比淘寶(含天貓)、京東、
    的頭像 發(fā)表于 12-17 15:24 ?422次閱讀
    <b class='flag-5'>淘寶</b>、<b class='flag-5'>京東</b>、<b class='flag-5'>拼</b><b class='flag-5'>多多</b>API各顯神通,商家如何選擇?

    API助力,讓淘寶京東多多店鋪流量如潮水般涌來(lái)

    在電運(yùn)營(yíng)中,精準(zhǔn)的流量導(dǎo)入是店鋪增長(zhǎng)的核心引擎。通過(guò)開放平臺(tái)的API接口,開發(fā)者可實(shí)現(xiàn)自動(dòng)化運(yùn)營(yíng),顯著提升商品曝光與轉(zhuǎn)化率。本文以淘寶、京東
    的頭像 發(fā)表于 12-01 14:51 ?308次閱讀
    API助力,讓<b class='flag-5'>淘寶</b><b class='flag-5'>京東</b><b class='flag-5'>拼</b><b class='flag-5'>多多</b>店鋪流量如潮水般涌來(lái)

    借助API,淘寶京東多多賣家輕松應(yīng)對(duì)市場(chǎng)變化

    ? 在瞬息萬(wàn)變的電市場(chǎng)中,淘寶、京東、多多三大平臺(tái)的賣家常常面臨庫(kù)存管理混亂、價(jià)格調(diào)整滯后、訂單處理效率低下等痛點(diǎn)。如今,通過(guò)開放平臺(tái)的
    的頭像 發(fā)表于 11-28 17:34 ?1424次閱讀
    借助API,<b class='flag-5'>淘寶</b><b class='flag-5'>京東</b><b class='flag-5'>拼</b><b class='flag-5'>多多</b>賣家輕松<b class='flag-5'>應(yīng)對(duì)</b>市場(chǎng)變化

    如何通過(guò)API獲取1688平臺(tái)商品詳情

    獲取商品詳情,包括API概述、訪問(wèn)方法、請(qǐng)求示例代碼實(shí)現(xiàn)。 1. API概述 1688平臺(tái)提供了一系列開放API接口,允許開發(fā)者獲取
    的頭像 發(fā)表于 11-11 14:00 ?1161次閱讀
    如何通過(guò)API獲取<b class='flag-5'>1688</b>平臺(tái)<b class='flag-5'>商品</b><b class='flag-5'>詳情</b>

    深入解析:如何通過(guò)接口獲取多多商品詳情數(shù)據(jù)

    ? ?引言 在電商數(shù)據(jù)分析和第三方應(yīng)用開發(fā)中,獲取商品詳情信息是基礎(chǔ)且關(guān)鍵的一環(huán)。對(duì)于多多這個(gè)國(guó)內(nèi)主流電
    的頭像 發(fā)表于 11-10 15:15 ?767次閱讀
    深入<b class='flag-5'>解析</b>:如何通過(guò)接口獲取<b class='flag-5'>拼</b><b class='flag-5'>多多</b><b class='flag-5'>商品</b><b class='flag-5'>詳情</b>數(shù)據(jù)

    淘寶商品詳情API接口技術(shù)解析實(shí)戰(zhàn)應(yīng)用

    出發(fā),系統(tǒng)解析淘寶商品詳情API接口的調(diào)用機(jī)制、數(shù)據(jù)結(jié)構(gòu)及典型應(yīng)用場(chǎng)景,并附上基于Python的完整調(diào)用示例,助力開發(fā)者高效集成
    的頭像 發(fā)表于 11-04 09:50 ?336次閱讀

    淘寶京東API商品詳情接口示例參考

    淘寶商品詳情接口示例 接口名稱:taobao.item_get(或類似的接口名稱,具體以淘寶開放平臺(tái)文檔為準(zhǔn)) 請(qǐng)求參數(shù): num_iid:
    的頭像 發(fā)表于 11-04 09:36 ?288次閱讀

    淘寶商品詳情 API 實(shí)戰(zhàn)5 大策略提升店鋪轉(zhuǎn)化率(附簽名優(yōu)化代碼 + 避坑指南)

    ”“差評(píng)失控” 等轉(zhuǎn)化率殺手。本文結(jié)合我對(duì)接 300 + 淘寶店鋪的實(shí)戰(zhàn)經(jīng)驗(yàn),拆解 API 如何落地到動(dòng)態(tài)定價(jià)、庫(kù)存預(yù)警等 5 大場(chǎng)景,代碼做了簽名優(yōu)化和錯(cuò)誤處理,新手也能直接復(fù)用,避
    的頭像 發(fā)表于 09-15 10:53 ?986次閱讀

    如何利用京東商品詳情id拿到商品的詳細(xì)信息 示例展示

    利用京東商品詳情 ID(即 SKU ID)獲取商品詳細(xì)信息,可通過(guò)京東開放平臺(tái)官方 API 或非官方接口(逆向
    的頭像 發(fā)表于 07-10 09:37 ?1396次閱讀