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

如何快速将Selenium获取的电商数据导入Pandas DataFrame?

优化Selenium爬取商品数据导入Pandas的速度

你的代码运行慢主要有两个核心问题:一是每次循环都创建新DataFrame并执行concat,这会产生大量临时对象,带来极高的性能开销;二是固定的time.sleep既可能浪费等待时间,也可能因为页面加载不完整导致数据获取失败。下面是针对性的优化方案:

核心优化方向

  • 一次性提取所有元素的文本内容,避免循环内重复操作
  • 直接构造完整的数据集合,再一次性转换为DataFrame,彻底抛弃循环拼接的低效方式
  • 用Selenium的显式等待替代time.sleep,精准等待元素加载完成后再执行操作,更高效也更可靠

优化后的代码

from selenium import webdriver
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

browser = webdriver.Chrome()
browser.get("https://www.hipercor.es/supermercado/buscar/?term=la+casera&search=text")

# 显式等待商品元素加载完成,替代固定时长的sleep
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_all_elements_located((By.XPATH, "//*[@class='product_tile-description']")))

# 用列表推导式一次性提取所有标题和价格文本
titles = [item.text for item in browser.find_elements(By.XPATH, "//*[@class='product_tile-description']")]
prices = [item.text for item in browser.find_elements(By.XPATH, "//*[@class='prices product_tile-prices']")]

# 直接构造字典生成DataFrame,无需循环拼接
hiper = pd.DataFrame({
    "PRODUCT": titles,
    "PRICE": prices
})

print(hiper)
browser.quit()

优化效果说明

  1. 列表推导式提取文本:一次性遍历所有元素并提取文本,比循环内逐个处理的执行效率更高
  2. 直接生成DataFrame:避免了循环中多次pd.concat的开销——concat操作每次都会复制整个已有DataFrame,数据量越大,这种方式的性能损耗越明显
  3. 显式等待:只在元素真正加载完成后才继续执行,不会像time.sleep那样固定等待无意义的时长,有效节省等待时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:07:52