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

使用Selenium爬取网站时返回不完整HTML,无法获取全部商品卡片

解决Gap网站爬取商品卡片结果不足的问题

以下是几个常见原因和对应的解决方法:

1. 商品列表需要滚动触发动态加载

Gap的商品列表采用滚动加载机制,只等待4秒只会加载页面初始显示的少量商品。你需要模拟滚动到底部的操作,触发更多商品加载,直到页面不再更新内容。

代码示例:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

url = 'https://www.gap.com/browse/category.do?cid=5664&nav=meganav%3AWomen%3ACategories%3AJeans#pageId=0&department=136'
options = Options()
options.add_argument('--headless')
# 添加UA伪装和反检测参数
options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')
options.add_argument('--disable-blink-features=AutomationControlled')

driver = webdriver.Chrome(options=options, executable_path='/Users/wangxining/Downloads/chromedriver_mac_arm64/chromedriver')
driver.get(url)

# 循环滚动加载所有商品
last_scroll_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)  # 等待加载时间可根据网络调整
    current_scroll_height = driver.execute_script("return document.body.scrollHeight")
    if current_scroll_height == last_scroll_height:
        break
    last_scroll_height = current_scroll_height

soup = BeautifulSoup(driver.page_source, 'html.parser')
product_cards = soup.find_all('div', class_='product-card')
print(f"共抓取到 {len(product_cards)} 个商品卡片")
driver.quit()

2. 避免使用动态生成的Class名

你代码中使用的category-page-zu5l9z这类Class后缀是动态生成的,每次页面加载都会变化,导致定位不到元素。改用固定不变的product-card类来定位,就能稳定获取商品卡片。

3. 用显式等待替代硬等待

time.sleep(4)是硬等待,无法保证页面元素完全加载完成。改用Selenium的显式等待,等待商品卡片元素出现后再解析页面,更可靠:

代码片段示例:

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

# 滚动加载后,等待商品卡片全部加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, 'product-card'))
)

soup = BeautifulSoup(driver.page_source, 'html.parser')
product_cards = soup.find_all('div', class_='product-card')

4. 解决Headless模式被检测的问题

部分网站会识别Headless浏览器并限制内容渲染,添加UA伪装和禁用自动化检测参数,能避免被网站拦截,确保页面正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:35