ITPub博客

首页 > 大数据 > 数据挖掘 > 从字段解析到反爬突破:淘宝、京东、拼多多等 5 大电商平台商品详情页实战案例精讲

从字段解析到反爬突破:淘宝、京东、拼多多等 5 大电商平台商品详情页实战案例精讲

原创 数据挖掘 作者:爱干饭的数据鱼 时间:2025-10-13 15:37:59 0 删除 编辑
在电商数据获取场景中,淘宝、京东等平台的详情页解析是核心需求。本文精简梳理 5 大主流平台的解析要点,含核心代码与避坑提示,适配博客阅读场景,无冗余内容。

一、淘宝商品详情解析

1. 页面关键特性

  • 动态 JS 加载 SKU / 库存,价格可能字体加密
  • 高频请求易触发滑块验证

  • 注册并获取API Key:https://o0b.cn/lin

2. 核心字段提取代码

python
运行
import requestsimport jsonfrom bs4 import BeautifulSoupimport redef parse_taobao_item(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://www.taobao.com'
    }
    try:
        response = requests.get(url, headers=headers, timeout=10)
        soup = BeautifulSoup(response.text, 'html.parser')
        # 提取标题
        title = soup.select_one('h1[data-spm="1000983"]').text.strip() if soup.select_one('h1[data-spm="1000983"]') else "未获取"
        # 提取价格(基础解密)
        price_text = soup.select_one('.tm-price').text if soup.select_one('.tm-price') else "0"
        price = re.search(r'\d+\.\d+', price_text).group(0) if re.search(r'\d+\.\d+', price_text) else "0"
        # 提取SKU(从JS解析)
        sku_info = []
        sku_script = soup.find('script', string=re.compile('skuMap'))
        if sku_script:
            sku_data = re.search(r'skuMap\s*:\s*({.*?})', sku_script.string)
            if sku_data:
                sku_json = json.loads(sku_data.group(1))
                sku_info = [{'sku_id': k, 'props': v['name'], 'price': v['price']} for k, v in sku_json.items()]
        return {'platform': '淘宝', 'title': title, 'price': float(price), 'sku_info': sku_info}
    except Exception as e:
        return {'error': f'淘宝解析失败:{str(e)}'}

二、京东商品详情解析

1. 页面关键特性

  • 数据多通过 JSON API 返回,价格需调用专属接口
  • 登录态影响会员价获取

2. 核心字段提取代码

python
运行
import requestsfrom bs4 import BeautifulSoupdef parse_jd_item(item_id):
    headers = {'User-Agent': 'Mozilla/5.0', 'Referer': f'https://item.jd.com/{item_id}.html'}
    try:
        # 提取标题
        base_res = requests.get(f'https://item.jd.com/{item_id}.html', headers=headers, timeout=8)
        soup = BeautifulSoup(base_res.text, 'html.parser')
        title = soup.select_one('.sku-name').text.strip() if soup.select_one('.sku-name') else "未获取"
        # 提取价格(调用价格API)
        price_res = requests.get(f'https://p.3.cn/prices/mgets?skuIds=J_{item_id}', headers=headers, timeout=8)
        price = float(price_res.json()[0]['p']) if price_res.json() else 0
        # 提取SKU
        sku_res = requests.get(f'https://item-soa.jd.com/getWareBusiness?skuId={item_id}', headers=headers, timeout=8)
        sku_info = []
        if 'skus' in sku_res.json().get('wareSku', {}):
            sku_info = [{'sku_id': s['skuId'], 'props': s['name'], 'price': float(s['price'])} for s in sku_res.json()['wareSku']['skus']]
        return {'platform': '京东', 'title': title, 'price': price, 'sku_info': sku_info}
    except Exception as e:
        return {'error': f'京东解析失败:{str(e)}'}

三、拼多多商品详情解析

1. 页面关键特性

  • 依赖移动端 API,请求参数需模拟设备信息
  • 反爬严格,需控制请求频率

2. 核心字段提取代码

python
运行
import requestsimport timeimport randomdef parse_pinduoduo_item(item_id):
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15',
        'Referer': f'https://mobile.yangkeduo.com/goods.html?goods_id={item_id}'
    }
    params = {
        'item_id': item_id,
        'pdduid': int(time.time()*1000),
        '_': int(time.time()*1000),
        'random': round(random.random(), 16)
    }
    try:
        response = requests.get('https://apiv3.pinduoduo.com/api/item/get', params=params, headers=headers, timeout=5)
        data = response.json().get('item', {})
        return {
            'platform': '拼多多',
            'title': data.get('goods_name', '未获取'),
            'price': data.get('min_group_price', 0)/100,  # 单位:分转元
            'sales': data.get('sales_tip', '0人已买')
        }
    except Exception as e:
        return {'error': f'拼多多解析失败:{str(e)}'}

四、1688 商品详情解析

1. 页面关键特性

  • 含供应商信息(企业名、所在地)
  • SKU 支持混批属性(起订量、可售数量)

2. 核心字段提取代码

python
运行
import requestsimport jsonfrom bs4 import BeautifulSoupimport redef parse_1688_item(item_id):
    headers = {'User-Agent': 'Mozilla/5.0', 'Referer': 'https://www.1688.com'}
    try:
        response = requests.get(f'https://detail.1688.com/offer/{item_id}.html', headers=headers, timeout=10)
        soup = BeautifulSoup(response.text, 'html.parser')
        # 基础信息
        title = soup.select_one('.d-title').text.strip() if soup.select_one('.d-title') else "未获取"
        company = soup.select_one('.company-name').text.strip() if soup.select_one('.company-name') else "未获取"
        # SKU提取
        sku_info = []
        sku_script = soup.find('script', string=re.compile('skuMap'))
        if sku_script:
            sku_data = re.search(r'skuMap\s*:\s*({.*?})', sku_script.string)
            if sku_data:
                sku_json = json.loads(sku_data.group(1))
                sku_info = [{'sku_id': k, 'props': v['name'], 'min_order': v['minOrderQuantity']} for k, v in sku_json.items()]
        return {'platform': '1688', 'title': title, 'company': company, 'sku_info': sku_info}
    except Exception as e:
        return {'error': f'1688解析失败:{str(e)}'}

五、唯品会商品详情解析

1. 页面关键特性

  • 突出品牌与折扣,数据嵌在页面 JS 中
  • 活动时效性强,需标注数据时间

2. 核心字段提取代码

python
运行
import requestsimport jsonimport refrom datetime import datetimedef parse_vip_item(item_id):
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15',
        'Referer': 'https://m.vip.com/'
    }
    try:
        response = requests.get(f'https://m.vip.com/product-{item_id}.html', headers=headers, timeout=8)
        # 提取JS中的商品数据
        match = re.search(r'window.productInfo\s*=\s*({.*?});', response.text, re.DOTALL)
        if not match:
            return {'error': '未找到唯品会数据'}
        data = json.loads(match.group(1)).get('product', {})
        return {
            'platform': '唯品会',
            'title': data.get('name', '未获取'),
            'brand': data.get('brandName', '未获取'),
            'price': float(data.get('salePrice', 0)),
            'discount': data.get('discount', '无折扣'),
            'fetch_time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
    except Exception as e:
        return {'error': f'唯品会解析失败:{str(e)}'}

六、通用注意事项(适配平台规则)

  1. 动态内容处理:用 Selenium/Playwright 渲染 JS,或优先调用平台官方 API(如淘宝 item_get、京东联盟接口),减少爬取风险。
  2. 反爬应对:随机轮换 User-Agent,单 IP 请求间隔≥3 秒,避免高频触发验证。
  3. 数据验证:价格需校验格式(如两位小数),商品 ID 按平台规则核对(淘宝 11-12 位、京东 10-13 位)。

总结

以上代码可直接用于基础数据提取,实际使用需根据平台页面更新调整选择器 / API 参数。若遇到 “接口加密”“滑块验证” 等问题,欢迎在评论区留言,会及时分享解决方式!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047598/viewspace-3097491/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
电商数据的佼佼者,18569030594 分享电商API接口干货,十几年的API接口数据经验,欢迎交流

注册时间:2025-09-15

  • 博文量
    55
  • 访问量
    60850