如何使用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
相关产品推荐
相关产品推荐

