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

使用Selenium和BeautifulSoup爬取商品库存返回空列表如何解决

亚马逊商品库存爬取问题修复方案

核心共性问题

亚马逊有严格的反爬机制,未做伪装的请求会被拦截,返回人机验证页或空内容响应,这是两种方案都返回空结果的核心原因,除此之外两个版本的代码还存在各自的语法、逻辑错误,具体修复点如下:


Selenium版本问题

  • 方法调用错误:Selenium没有find_element_by_class方法,且多类名不能直接传空格分隔的字符串,需要改用CSS选择器定位,定位到元素后必须取.text属性才能拿到库存文本,原代码直接用元素对象和字符串对比,永远无法匹配。
  • 缺少反爬配置:无配置的Chrome浏览器会被亚马逊识别为爬虫,需要添加无头模式、UA伪装、禁用自动化标识等配置,参考配置如下:
from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions()
# 无头模式(可选,不想弹出窗口就开启)
options.add_argument('--headless=new')
# 伪装浏览器UA
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
# 隐藏自动化标识
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 初始化驱动
s = Service('你的chromedriver路径')
driver = webdriver.Chrome(service=s, options=options)
  • 逻辑优化:拿到的库存文本可能前后带空格、换行,建议用.strip()处理后再做对比,修改定位和取值代码如下:
status = driver.find_element(By.CSS_SELECTOR, '.a-size-medium.a-color-state')
ps5_avail = status.text.strip()

BeautifulSoup版本问题

  • 缺少请求头伪装:直接用requests.get请求亚马逊会被拦截,必须添加UA等请求头伪装成浏览器,参考配置如下:
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9'
}
res = requests.get(url, headers=headers)
  • 查找逻辑错误:find_all(string='In Stock')是完全匹配文本,实际亚马逊的库存文本前后会有多余字符、大小写可能不一致,建议改用模糊匹配;原代码的判断逻辑完全写反,find_all返回的是列表,空列表对应无货,有内容对应有货。修改查找和判断代码如下:
# 模糊匹配包含in stock的文本,不区分大小写
text = soup.find_all(string=lambda t: 'in stock' in t.strip().lower())
if len(text) == 0:
    print("Out of Stock")
else:
    print("Get it!")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:36:03