You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取亚马逊商品页面无法提取Merchant ID问题求助

问题根因

你提取Merchant ID失败的核心原因如下:

  • 亚马逊反爬机制触发后会返回验证码/跳转页面,你当前没有做返回页有效性校验,直接解析非目标页面自然找不到对应字段
  • 现有XPath规则只覆盖了旧版页面结构,亚马逊新版商品/报价页的隐藏input ID已经更新,原有规则匹配不到
  • 正则匹配逻辑只取了第一个script标签的内容,merchantId可能存在于任意script标签中,同时原有正则只覆盖了一种赋值格式,漏了键值对、带空格等多种写法

修复方案

1. 新增页面有效性校验

先校验返回状态码是否为200,再检查页面是否包含「Add to Cart」「Other Sellers on Amazon」这类特征字符串,确认返回的是正常商品页而非拦截页后再做解析。

2. 扩展XPath匹配规则

新增新版页面的input ID匹配项,覆盖merchantID、soldByMerchantId两种常见的新版ID。

3. 优化正则匹配逻辑

遍历所有script标签的内容,同时扩展正则规则,覆盖多种merchantId书写格式,同时通过长度规则过滤无效匹配。

4. 确认offer节点定位准确

如果是爬取多卖家报价列表,需确保你提取的offer节点对应单个卖家的独立报价区块,不要错误定位到全局页面根节点。

修正后的参考代码

import re
import logging

log = logging.getLogger(__name__)

# Get Seller merchant ID
merchant_id = ""
# 先校验当前offer节点是否有效,可根据实际页面结构调整校验逻辑
if offer:
    # 扩展XPath匹配规则,覆盖新老版本所有可能的input ID
    try:
        merchant_input = offer.xpath(
            ".//input[@id='ftSelectMerchant' or @id='ddmSelectMerchant' or @id='merchantID' or @id='soldByMerchantId']"
        )[0]
        # 部分解析库获取属性要用get(),避免.value调用失败
        merchant_id = merchant_input.get("value", "").strip()
    except IndexError:
        # 遍历所有script标签匹配,不再只取第一个
        all_scripts = offer.xpath(".//script/text()")
        for script_content in all_scripts:
            script_content = script_content.strip()
            if not script_content:
                continue
            # 扩展正则,匹配赋值、键值对、带空格等多种格式,同时限制ID长度符合亚马逊规则
            match = re.search(r"merchantId\s*[:=]\s*[\"'](\w{13,20})[\"']", script_content, re.IGNORECASE)
            if match:
                merchant_id = match.group(1)
                break

log.info(f"merchant_id: {merchant_id}")
if not merchant_id:
    log.debug("No Merchant ID found")

额外建议

如果触发了亚马逊反爬,可通过增加请求间隔、更换代理IP、添加完整的请求头(尤其是User-Agent、Accept-Language、Cookie)解决,避免返回拦截页。


内容的提问来源于stack exchange,提问作者rf_dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:36:04