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

如何使用Selenium实现网站多页面数据爬取并存储至Pandas DataFrame

全量页面爬取实现方案

首先修正你现有代码的一处笔误:你获取价格元素的变量名为precoProduto,但循环取值时误用了不存在的price变量,运行会直接报错,需要先同步变量名。

针对多页爬取需求,思路是循环判断分页栏的「下一页」按钮是否可交互,每完成一页数据采集就点击跳转到下一页,直到下一页按钮不存在/不可点击时终止循环即可,完整实现代码如下:

from selenium import webdriver 
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import pandas as pd 
import time

# 初始化驱动
driver = webdriver.Chrome(executable_path=r"C:/Users/Usuario/.spyder-py3/chromedriver.exe")
driver.implicitly_wait(3)
driver.get("https://www.mercadolivre.com.br/ofertas")

# 初始化总存储列表
all_produtos = []
all_preco = []

while True:
    # 采集当前页数据
    tituloProduto = driver.find_elements(By.CLASS_NAME, 'promotion-item__title')
    precoProduto = driver.find_elements(By.CLASS_NAME, 'promotion-item__price')
    
    # 追加到总列表
    for x in tituloProduto:
        all_produtos.append(x.text)
    for x in precoProduto:
        all_preco.append(x.text)
    
    # 尝试找下一页按钮
    try:
        next_btn = driver.find_element(By.CSS_SELECTOR, 'li.andes-pagination__button--next a')
        # 判断下一页是否可点击
        if 'andes-pagination__link--disabled' in next_btn.get_attribute('class'):
            break
        next_btn.click()
        # 加加载等待,避免爬取过快触发反爬或页面未加载完成
        time.sleep(2)
    except NoSuchElementException:
        # 找不到下一页按钮,说明到最后一页,退出循环
        break

# 统一转成DataFrame
df = pd.DataFrame({
    'produto': all_produtos,
    'preco': all_preco
})

print(df.head())
# 可选:导出到csv
# df.to_csv('mercadolivre_ofertas.csv', index=False, encoding='utf-8-sig')

driver.quit()

补充说明

  • 代码使用了Selenium高版本推荐的By类定位元素,替换了已经被弃用的find_elements_by_class_name旧写法,兼容Selenium 4.x版本
  • 加了页面跳转后的等待逻辑,避免页面未加载完成就采集导致数据缺失
  • 采集完全部数据后统一生成DataFrame,避免每页生成新对象覆盖旧数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:18:04