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

为何Selenium爬虫代码无法统计亚马逊商品总数?

亚马逊印度站商品爬取数据为空的问题分析

问题场景

以下是用于爬取亚马逊印度站10页“10000卢比以下智能手机”商品数据的Selenium代码,目标是统计商品总数并展示商品名称:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep
from selenium.webdriver.common.by import By


path = r'C:\Users\.wdm\drivers\chromedriver\win32\108.0.5359\chromedriver.exe'

# open the browser
# browser = webdriver.Chrome(executable_path=path)
s=Service(r'C:\Users\.wdm\drivers\chromedriver\win32\108.0.5359\chromedriver.exe')
browser = webdriver.Chrome(service=s)
# load the webpage
browser.get('https://www.amazon.in')
browser.maximize_window()

# get the input elements
input_search = browser.find_element(By.ID,'twotabsearchtextbox')
search_button = browser.find_element(By.XPATH,"(//input[@type='submit'])[1]")

# send the input to the webpage
input_search.send_keys("Smartphones under 10000")
sleep(1)
search_button.click()

products = []
for i in range(10):
    print('Scraping page', i+1)
    product = browser.find_elements(By.CLASS_NAME,'a-size-medium a-color-base a-text-normal')
    for p in product:
        products.append(p.text)
    next_button = browser.find_element(By.CLASS_NAME,'a-last')
    next_button.click()
    sleep(3)

print(len(products))
products[:5]
brower.quit()

运行后未获取到商品数据,输出如下:

Scraping page 1
Scraping page 2
Scraping page 3
Scraping page 4
Scraping page 5
Scraping page 6
Scraping page 7
Scraping page 8
Scraping page 9
Scraping page 10
0

Process finished with exit code 0

统计结果为0,问题原因如下:

问题原因分析

  • CLASS_NAME定位规则错误:
    Selenium的By.CLASS_NAME不支持传入多个类名(空格分隔的字符串),代码中'a-size-medium a-color-base a-text-normal'是三个不同的类,Selenium会将其当作一个完整的类名去查找,而页面中不存在该类,因此无法定位到商品元素。正确的做法是使用By.CSS_SELECTOR,写法为.a-size-medium.a-color-base.a-text-normal,或者用By.XPATH来定位。

  • 页面等待机制不可靠:
    代码中使用固定时长的sleep()等待页面加载,但网络波动或页面加载缓慢时,可能在商品元素未渲染完成就执行查找操作,导致获取不到元素。建议改用显式等待(WebDriverWait),等待目标元素出现后再进行操作,稳定性更强。

  • 代码拼写错误:
    最后一行退出浏览器的代码写成了brower.quit(),正确的变量名是browser,虽然这个错误不会直接导致数据为空,但会引发程序退出失败的问题。

  • 亚马逊反爬机制影响:
    亚马逊会检测自动化爬虫,可能返回不同的页面结构或限制访问,导致元素定位失效。可以尝试配置ChromeOptions添加模拟浏览器的User-Agent,或者使用无头模式,降低被识别为爬虫的概率。

修正后的示例代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path = r'C:\Users\.wdm\drivers\chromedriver\win32\108.0.5359\chromedriver.exe'
s = Service(path)

# 配置浏览器选项,添加User-Agent
options = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36")

browser = webdriver.Chrome(service=s, options=options)
browser.get('https://www.amazon.in')
browser.maximize_window()

# 显式等待搜索框加载
input_search = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.ID, 'twotabsearchtextbox'))
)
search_button = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.XPATH, "(//input[@type='submit'])[1]"))
)

input_search.send_keys("Smartphones under 10000")
search_button.click()

products = []
wait = WebDriverWait(browser, 15)

for i in range(10):
    print('Scraping page', i+1)
    # 等待商品元素加载完成
    product_elements = wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.a-size-medium.a-color-base.a-text-normal'))
    )
    for p in product_elements:
        if p.text:  # 过滤空文本元素
            products.append(p.text)
    
    try:
        # 等待下一页按钮可点击
        next_button = wait.until(
            EC.element_to_be_clickable((By.CLASS_NAME, 'a-last'))
        )
        next_button.click()
    except:
        print("已无更多页面,停止爬取")
        break

print(f"商品总数:{len(products)}")
print("前5个商品名称:")
for name in products[:5]:
    print(name)

browser.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:47