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

使用Beautiful Soup爬取亚马逊产品仅返回16条结果,页面实际有30条,原因何在?

为什么你的Beautiful Soup爬亚马逊只拿到16条商品?

我之前爬亚马逊的时候也碰到过这种情况,明明页面显示30条,但静态解析出来只有十几条,大概率是这几个原因:


1. 商品是动态加载的

亚马逊的搜索结果页经常不会一次性把所有商品都塞进初始HTML里。你看到的30条里,前16条可能是页面加载时就渲染好的,剩下的需要你滚动页面到下方,才会通过AJAX请求加载新的内容。而Beautiful Soup只能解析请求返回的静态HTML,自然拿不到后面没加载的商品。

解决办法是用浏览器自动化工具(比如Selenium或Playwright)模拟用户滚动页面,等所有商品都加载完成后再解析:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 初始化浏览器(这里用Chrome,需要对应版本的驱动)
driver = webdriver.Chrome()
driver.get("你的亚马逊搜索页面URL")

# 模拟滚动到底部,触发加载
last_scroll_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动到当前页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待2秒让内容加载(根据网络情况调整)
    time.sleep(2)
    # 获取新的滚动高度
    new_scroll_height = driver.execute_script("return document.body.scrollHeight")
    # 如果高度不再变化,说明已经加载完所有内容
    if new_scroll_height == last_scroll_height:
        break
    last_scroll_height = new_scroll_height

# 现在解析完整的页面源码
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 替换成你原来用的商品选择器
products = soup.select(".s-result-item")
print(f"总共抓到{len(products)}条商品")

driver.quit()

2. 亚马逊的反爬机制截断了内容

亚马逊对爬虫很敏感,如果你的请求没有模拟正常浏览器的行为,服务器可能会返回不完整的页面内容,只给你显示部分商品。

这时候可以先给请求加个真实的User-Agent头,模拟浏览器访问:

import requests
from bs4 import BeautifulSoup

headers = {
    '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'
}

response = requests.get("你的亚马逊搜索页面URL", headers=headers)
# 先检查返回的状态码,200才是正常
print(f"请求状态码: {response.status_code}")

soup = BeautifulSoup(response.text, 'html.parser')
products = soup.select(".s-result-item")
print(f"抓到{len(products)}条商品")

如果加了User-Agent还是不行,可能需要进一步处理,比如添加Referer头、设置请求间隔,甚至用代理IP。


3. 你的选择器只匹配了部分商品

有时候亚马逊的页面结构里,前几页的商品和后面的商品可能用了不同的类名或者容器。比如前16条在某个<div>里,剩下的在另一个<section>里,而你的选择器只定位了第一个容器。

解决办法是打开浏览器的开发者工具(F12),分别查看前16条和后面的商品的HTML结构,确认它们的共同选择器是什么,然后调整你的代码里的选择器。


你可以先按这个顺序排查:先检查请求返回的HTML里有没有30条商品(直接打印response.text搜索商品关键词),如果没有,那要么是动态加载要么是反爬;如果有,那就是选择器的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:08:09