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

爬取速卖通搜索页无法返回全部商品问题求助

问题:爬虫仅抓取16个商品,目标为60个

我用Python写了爬虫,想抓取AliExpress上的60个硅胶夜灯商品,但实际只返回16个。已经手动确认所有商品的类名一致(截图如下),但结果不符合预期。

商品类名截图

原代码

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from bs4 import BeautifulSoup

driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))

url = 'https://www.aliexpress.com/w/wholesale-silicone-night-light.html?SearchText=silicone+night+light&catId=0&initiative_id=SB_20230101130255&spm=a2g0o.productlist.1000002.0&trafficChannel=main&shipFromCountry=US&g=y'

driver.get(url)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

html = driver.page_source
soup = BeautifulSoup(html, 'lxml')

product_links = []


def get_element_title(element):
    return element.select('h1[class*="manhattan--titleText--"]')[0].text


def get_product_links(soup):
    for element in soup.select('a[class*="manhattan--container--"]'):
        link = f"http:{element['href']}"
        product_links.append(link)
        print(get_element_title(element))


get_product_links(soup)

问题原因

AliExpress采用滚动加载机制,仅执行一次滚动到页面底部后立即获取源码,此时页面还没完成全部60个商品的加载,只加载了初始的16个(或当前可见的部分)。

解决方案

1. 循环滚动+等待,确保所有商品加载完成

通过循环滚动页面,每次滚动后等待一段时间,直到页面高度不再变化(说明没有新内容加载),再抓取源码。

2. 显式等待元素加载

使用Selenium的WebDriverWait等待商品元素加载完成,避免过早抓取。

3. 修正链接拼接逻辑

原代码中http:{element['href']}可能导致链接错误,AliExpress的链接是HTTPS协议,直接拼接https:或使用完整的element.get_attribute('href')更可靠。

修改后的代码示例

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from bs4 import BeautifulSoup
import time

driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))

url = 'https://www.aliexpress.com/w/wholesale-silicone-night-light.html?SearchText=silicone+night+light&catId=0&initiative_id=SB_20230101130255&spm=a2g0o.productlist.1000002.0&trafficChannel=main&shipFromCountry=US&g=y'

driver.get(url)
time.sleep(2)  # 初始等待页面加载

# 循环滚动直到页面高度不再变化
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)  # 等待新内容加载,可根据网速调整
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

html = driver.page_source
soup = BeautifulSoup(html, 'lxml')

product_links = []


def get_element_title(element):
    return element.select_one('h1[class*="manhattan--titleText--"]').text


def get_product_links(soup):
    for element in soup.select('a[class*="manhattan--container--"]'):
        # 优化链接拼接,避免协议错误
        link = element.get('href')
        if not link.startswith('http'):
            link = f"https:{link}"
        product_links.append(link)
        print(get_element_title(element))


get_product_links(soup)
print(f"共抓取到{len(product_links)}个商品链接")

driver.quit()

关键说明

  • 滚动后的等待时间可根据网络情况调整,避免等待过短导致加载不完整
  • 使用select_one替代select()[0],避免索引越界报错
  • 链接处理逻辑优化,确保生成有效的HTTPS链接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:10:34