基于Python Selenium从OfferUp搜索结果提取图片的技术求助
问题分析与修复方案
你当前的代码存在几个关键问题导致无法正确提取OfferUp的商品图片:
- 定位范围太广:直接通过
img标签获取会拿到页面上所有图片(包括网站logo、导航图标等非目标商品图) - 语法错误:
find_elements((By.TAG_NAME, 'img'))多了一层括号,正确写法是find_elements(By.TAG_NAME, 'img') - 懒加载未处理:OfferUp的商品图片是滚动加载的,静态等待无法触发所有图片加载
- 等待方式不严谨:
time.sleep不如WebDriverWait可靠,容易因网络波动导致元素未加载完成
以下是修复后的代码,能精准提取搜索结果中的商品图片,并处理懒加载:
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 time # 初始化浏览器 chrome_driver_path = 'C:\\Users\gues\\OneDrive\\Desktop\\PyFiles\\chromedriver.exe' driver = webdriver.Chrome(executable_path=chrome_driver_path) driver.maximize_window() # 打开目标页面 wait = WebDriverWait(driver, 20) driver.get('https://offerup.com/search?q=dresser&DISTANCE=20&DELIVERY_FLAGS=p&PRICE_MAX=100') # 处理懒加载:滚动页面直到所有商品加载完成 def scroll_to_load_all_items(): last_height = driver.execute_script("return document.body.scrollHeight") while True: # 滚动到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) # 检查页面高度是否变化 new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height scroll_to_load_all_items() # 精准定位商品图片(OfferUp商品图片的父容器有特定类名,可通过此缩小范围) wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div[data-testid="listing-image"] img'))) product_images = driver.find_elements(By.CSS_SELECTOR, 'div[data-testid="listing-image"] img') # 提取图片URL,优先取data-src(懒加载图片的真实地址),再取src image_urls = [] for img in product_images: img_url = img.get_attribute('data-src') or img.get_attribute('src') if img_url and 'http' in img_url: # 过滤无效地址 image_urls.append(img_url) # 打印结果 for idx, url in enumerate(image_urls, 1): print(f"商品图片 {idx}: {url}") # 关闭浏览器(可选) # driver.quit()
关键修复点说明:
- 精准定位:通过
div[data-testid="listing-image"] img直接定位商品图片容器内的图片,避免无关图片混入 - 懒加载处理:通过循环滚动页面并检查高度变化,确保所有商品图片都被触发加载
- 属性优先顺序:OfferUp的懒加载图片会把真实地址存在
data-src,占位图存在src,所以优先提取data-src - 可靠等待:用
WebDriverWait确保商品图片元素加载完成后再提取,避免因页面未加载完全导致的空结果
提取到的image_urls列表即可用于在其他网站或弹窗中展示,配合定时任务就能实现商品价格与图片的实时更新。
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

