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

如何用Python+Selenium完整爬取亚马逊50个电视类畅销品名称?

亚马逊畅销电视页面全量爬取解决方案

问题核心

亚马逊畅销列表采用动态加载机制,前30个元素初始渲染,剩余20个需要滚动页面触发后端加载。直接滚动到底或固定sleep可能因加载时机不匹配导致元素未找到。

可行方案

1. 渐进式滚动+显式等待

通过循环滚动页面,每次滚动后等待元素加载,直到获取到50个标题:

  • 用集合存储标题避免重复(页面可能重复渲染元素)
  • 显式等待替代固定sleep,确保元素加载完成再提取

2. 代码实现

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化浏览器,配置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/118.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)

# 打开目标页面
driver.get("https://www.amazon.com/Best-Sellers-Electronics-Televisions/zgbs/electronics/172659")
driver.maximize_window()

target_count = 50
titles = set()

while len(titles) < target_count:
    # 滚动到当前页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待页面加载(可根据网络情况调整)
    time.sleep(2)
    
    try:
        # 显式等待所有标题元素加载完成
        title_elements = WebDriverWait(driver, 10).until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".zg-item .p13n-sc-truncate"))
        )
        # 提取标题文本并去重
        for elem in title_elements:
            title_text = elem.text.strip()
            if title_text:
                titles.add(title_text)
    except Exception as e:
        print(f"加载失败: {str(e)}")
        break

# 输出结果
final_titles = list(titles)[:target_count]
print(f"成功获取 {len(final_titles)} 个产品标题:")
for idx, title in enumerate(final_titles, 1):
    print(f"{idx}. {title}")

driver.quit()

3. 优化技巧

  • 精准滚动触发:如果直接滚到底无效,可滚动到当前最后一个元素位置,强制触发加载:
    items = driver.find_elements(By.CSS_SELECTOR, ".zg-item")
    if items:
        last_item = items[-1]
        driver.execute_script("arguments[0].scrollIntoView({block: 'end'});", last_item)
    
  • 反爬规避:增加随机等待时间(time.sleep(random.uniform(1,3))),避免固定间隔被识别;不要频繁运行脚本,防止IP被限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:20:34