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

爬取亚马逊搜索结果时 相同XPath定位部分商品价格失效问题

亚马逊搜索页价格定位失败问题修复方案

核心问题原因

  • 原有XPath使用@class="xxx"的完全匹配规则过于严格,亚马逊会根据商品类型、活动状态动态给价格元素追加额外类名,导致匹配失败
  • 缺少多路径兜底匹配逻辑,不同展示样式的商品卡片价格存放节点存在差异

具体修复方案

  1. 把class的完全匹配改为包含匹配,降低匹配严格度
  2. 新增备用价格提取逻辑,优先取更稳定的隐藏完整价格节点,取不到再用整数+小数的组合方式提取
    修改后可运行代码如下:
for asin in product_asin:
    item_path = f'//div[@data-asin="{asin}"]'
    item_details = driver.find_element_by_xpath(item_path)

    # 查找并添加商品标题
    title = item_details.find_element_by_xpath('.//span[contains(@class, "a-size-medium") and contains(@class, "a-text-normal")]')
    product_titles.append(title.text)

    # 查找并添加商品链接
    product_link = item_details.find_element_by_xpath('.//a[contains(@class, "a-link-normal") and contains(@class, "a-text-normal")]').get_attribute("href")
    product_links.append(product_link)

    # 查找商品价格 新增多路径匹配逻辑
    price = 0
    # 优先取稳定的隐藏完整价格节点
    full_price_nodes = item_details.find_elements_by_xpath('.//span[contains(@class, "a-price")]//span[contains(@class, "a-offscreen")]')
    if full_price_nodes:
        # 提取数值部分,去掉货币符号
        price_text = full_price_nodes[0].text.strip()
        if price_text.startswith('$'):
            price = price_text[1:]
    # 第一种方式取不到再用整数+小数组合提取
    else:
        whole_price = item_details.find_elements_by_xpath('.//span[contains(@class, "a-price-whole")]')
        fraction_price = item_details.find_elements_by_xpath('.//span[contains(@class, "a-price-fraction")]')
        if whole_price and fraction_price:
            price = f"{whole_price[0].text.strip('.')}.{fraction_price[0].text}"
    product_prices.append(price)

额外优化建议

  • 可以针对商品卡片节点增加显式等待,确保页面异步渲染完成后再提取元素,避免渲染未完成导致的定位失败
  • 提取价格时可以增加正则匹配逻辑,过滤掉非数字的异常字符,进一步提升容错率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:48:03