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

Selenium+BeautifulSoup爬取带Load more页无法获取新加载商品问题

问题根源

你的代码存在两个核心逻辑错误,导致无法获取动态加载的商品:

  • 解析用的数据源完全错误:你单独写了r=requests.get(url)发起独立HTTP请求,这份响应内容是网页首次加载的静态初始数据,和Selenium控制的浏览器环境完全隔离。你后续在浏览器里执行的所有点击"Load more"操作,都不会更新requests拿到的这份静态内容,因此不管点击多少次加载按钮,你用r.content初始化的soup里永远只有初始加载的36条商品。
  • 点击加载后未等待内容渲染:循环点击加载按钮时没有加等待新内容加载的逻辑,点击后直接进入下一轮操作,很容易出现新商品还没完成渲染就执行后续解析的问题,进一步导致数据遗漏。
修复方案
  1. 删除多余的requests相关请求逻辑,所有页面内容统一从Selenium控制的浏览器实例中获取
  2. 所有"Load more"点击操作全部完成后,再通过driver.page_source获取当前浏览器内渲染完成的完整页面源码,初始化BeautifulSoup做解析
  3. 每次点击加载按钮后增加显式等待,确认新商品已经渲染完成再执行下一步操作
修复后可运行代码
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time

allinfo=[]
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
url="https://zadaa.co/de-en/products/women/clothes-dresses/"
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),chrome_options=chrome_options)
driver.get(url)
wait = WebDriverWait(driver, 10)

# 关闭初始弹窗
closebutton=wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="content"]/div[5]/button')))
closebutton.click()

# 循环点击加载更多,每次点击后等待新商品加载
for x in range(9):
    button = wait.until(EC.element_to_be_clickable((By.ID, "load-more-products")))
    # 滚动到按钮位置避免元素遮挡导致点击失败
    driver.execute_script("arguments[0].scrollIntoView();", button)
    button.click()
    # 等待商品列表元素数量增加,确认新内容加载完成
    wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, 'a.product-list-item')) > 36 + x*24)
    time.sleep(0.5)

# 所有内容加载完成后,从浏览器当前渲染的页面源码初始化soup
soup=BeautifulSoup(driver.page_source,"html.parser")
content=soup.find_all('a',class_='product-list-item')
for properties in content:
    brand=properties.find("p",class_='product-list-item-title').text.strip()
    info={
        'name':brand,
    }
    allinfo.append(info)

df=pd.DataFrame(allinfo)
print(f"共获取到{len(df)}条商品数据")
print(df.head())
df.to_csv('zadaa.csv', index=False)
driver.quit()

注:代码中每次点击后判断商品数量的阈值匹配目标站点加载规律:初始加载36条,每次点击加载更多新增24条,你可以根据实际页面加载的单页商品数调整阈值,确保所有新内容渲染完成后再执行下一步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:06:08