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

使用Beautiful Soup、Selenium、Pandas爬取div/span类产品价格失败

解决Flight Club商品价格爬取空数据问题

看起来你的代码在面对Flight Club这种动态渲染的页面时,主要遇到了两个核心问题:元素选择器不匹配页面实际结构和页面未完全加载就急于抓取内容。咱们一步步来修复:

问题根源分析

  1. 原选择器无效:你代码里定位的div.product-essential row-fluid product-type-configurable类,在Flight Club的目标页面中根本不存在,自然找不到任何元素;
  2. 页面动态渲染延迟:Flight Club的商品信息是通过JS动态加载的,直接调用driver.page_source大概率还没拿到完整的渲染内容,导致BeautifulSoup解析不到有效数据。

修正后的可运行代码

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
from bs4 import BeautifulSoup
import pandas as pd

# 初始化浏览器(新版Selenium无需硬编码驱动路径,会自动匹配)
driver = webdriver.Chrome()
products = []
prices = []

target_url = 'https://www.flightclub.com/supreme-x-dunk-sb-low-varsity-red-varsity-red-white-black-152127?size=9.5'
driver.get(target_url)

try:
    # 等待价格元素加载完成,最多等待10秒,避免抓取未渲染的空内容
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'price'))
    )
    
    # 获取完全渲染后的页面源码
    content = driver.page_source
    soup = BeautifulSoup(content, "lxml")
    
    # 匹配页面实际的商品名称和价格元素
    product_name = soup.find('h1', class_='product-name').get_text(strip=True)
    product_price = soup.find('span', class_='price').get_text(strip=True)
    
    products.append(product_name)
    prices.append(product_price)
    
    # 生成DataFrame并打印结果
    df = pd.DataFrame({'Product Name': products, 'Price': prices})
    print(df)
    
finally:
    driver.quit()  # 确保无论是否出错,浏览器都会关闭,避免资源泄漏

关键改动说明

  • 添加等待机制:用WebDriverWait强制等待核心元素加载完成,彻底解决动态页面的渲染延迟问题;
  • 修正元素选择器:
    • 商品名称对应页面里的<h1 class="product-name">标签;
    • 价格直接定位全局的<span class="price">标签,不需要嵌套在无效的父级div中;
  • 优化浏览器管理:去掉硬编码的ChromeDriver路径,新版Selenium会自动适配驱动;添加finally块确保浏览器资源正常释放;

每日价格监控进阶提示

如果要实现长期的每日价格波动跟踪,建议:

  • 把代码封装成可复用函数,方便定时任务调用;
  • 加入异常捕获逻辑,比如元素找不到时自动重试;
  • 启用Chrome的无头模式运行,节省系统资源:
    options = webdriver.ChromeOptions()
    options.add_argument('--headless=new')
    driver = webdriver.Chrome(options=options)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:42