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

亚马逊笔记本商品价格爬取顺序与页面不一致问题排查求助

亚马逊笔记本商品价格爬取顺序与页面不一致问题排查求助

嗨,我来帮你分析下这个爬取顺序混乱的问题,大概率是商品容器选择器不准确导致的,咱们一步步拆解来看:

问题根源分析

你当前用的boxs = soup.find_all("div", class_="puisg-col puisg-col-4-of-12 ...")这个选择器,选中的是商品卡片里的右侧列元素,而非整个商品卡片本身。亚马逊的页面用网格布局(Grid)渲染商品,HTML里这些列元素的顺序,和你视觉上从上到下、从左到右的商品展示顺序并不匹配,自然爬出来的价格顺序就乱了。

而且这类布局相关的class命名非常不稳定,亚马逊随时可能调整布局类名,很容易导致漏爬或多选。

解决办法:换用精准的商品容器选择器

亚马逊的每个搜索结果商品项,都会带有data-component-type="s-search-result"这个专属标记属性,用它定位整个商品卡片,能严格保证爬取顺序和页面展示顺序完全一致。

修改后的代码如下:

import requests
from bs4 import BeautifulSoup

URL = "https://www.amazon.com/s?k=laptop&crid=288NMI7Z5E2WR&sprefix=laptop%2Caps%2C572&ref=nb_sb_noss_1"

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept-Language": "hr-HR,hr;q=0.9,en-US;q=0.8,en;q=0.7"
}

response = requests.get(URL, headers=header)
web_page = response.text
soup = BeautifulSoup(web_page, 'lxml')

# 用亚马逊官方标记的搜索结果项作为容器,顺序完全匹配页面展示
items = soup.find_all("div", {"data-component-type": "s-search-result"})

for item in items:
    try:
        name = item.find("span", class_="a-size-medium a-color-base a-text-normal").get_text(strip=True)
        price = item.find("span", class_="a-offscreen").get_text(strip=True)
        print(f"{name} - {price}")
    except AttributeError:
        # 处理特殊情况:比如部分商品缺货无价格、或名称元素不存在
        continue

额外优化说明

  1. 增加try-except异常捕获:避免遇到缺货商品(无价格)或特殊商品(无名称元素)时直接报错终止程序。
  2. 用get_text(strip=True)替代getText():自动去除文本前后的空格和换行,输出更整洁。

验证小技巧

你可以先打印len(items),看看和页面上实际显示的商品数量是否一致(正常亚马逊第一页是16-24个商品),如果数量对得上,那爬取的顺序就没问题啦~

备注:内容来源于stack exchange,提问作者SolidOpt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:19:29