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

如何用Selenium获取无href属性的Wallapop商品链接以爬取详情?

解决Wallapop商品无href时获取详情页数据的方法

方法一:直接用Selenium点击商品元素

既然已经在用Selenium处理页面导航,最直接的方式是定位商品卡片元素,模拟点击进入详情页,提取数据后再返回列表页继续处理。

步骤:

  • 用Selenium加载目标搜索页,等待商品列表渲染完成(推荐用WebDriverWait显式等待,避免因页面未加载完全导致元素定位失败)
  • 定位所有商品的容器元素(比如截图中的商品卡片,通常是带特定类名的div或article标签)
  • 遍历元素时注意:每次循环都要重新获取元素列表,避免页面刷新后元素引用失效;如果点击无反应,可先通过JS滚动到元素位置再点击
  • 进入详情页后,用Selenium或BeautifulSoup提取所需数据
  • 调用driver.back()返回列表页,重复上述流程

示例代码片段:

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
import random

driver = webdriver.Chrome()
driver.get("https://es.wallapop.com/app/search?keywords=monitor&filters_source=search_box&latitude=39.46895&longitude=-0.37686")

wait = WebDriverWait(driver, 10)
# 等待商品列表加载完成,替换为实际的商品卡片类名
wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "ItemCard")))

# 用索引循环避免元素失效
item_count = len(driver.find_elements(By.CLASS_NAME, "ItemCard"))
for i in range(item_count):
    items = driver.find_elements(By.CLASS_NAME, "ItemCard")
    current_item = items[i]
    
    # 滚动到元素位置再点击
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", current_item)
    time.sleep(random.uniform(0.5, 1.5))
    current_item.click()
    
    # 提取详情页数据,示例:获取标题和价格
    wait.until(EC.presence_of_element_located((By.TAG_NAME, "h1")))
    title = driver.find_element(By.TAG_NAME, "h1").text
    price = driver.find_element(By.CLASS_NAME, "ItemPrice").text
    print(f"标题:{title},价格:{price}")
    
    # 返回列表页并等待加载
    driver.back()
    wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "ItemCard")))
    time.sleep(random.uniform(1, 2))

driver.quit()

方法二:提取商品data属性构造详情链接

Wallapop的商品卡片通常会在元素上存储data-item-id这类属性,你可以提取该ID拼接成详情页URL,直接用Selenium访问。

步骤:

  • 用Selenium获取页面源码,传给BeautifulSoup解析
  • 遍历商品元素,提取data-item-id值
  • 构造详情页URL(格式一般为https://es.wallapop.com/item/[商品ID])
  • 直接访问构造好的URL,提取详情数据

示例代码片段:

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import random

driver = webdriver.Chrome()
driver.get("https://es.wallapop.com/app/search?keywords=monitor&filters_source=search_box&latitude=39.46895&longitude=-0.37686")

driver.implicitly_wait(10)
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

# 遍历商品卡片,替换为实际的标签和类名
for item_card in soup.find_all("div", class_="ItemCard"):
    item_id = item_card.get("data-item-id")
    if not item_id:
        continue
    
    detail_url = f"https://es.wallapop.com/item/{item_id}"
    driver.get(detail_url)
    
    # 提取详情数据
    wait = WebDriverWait(driver, 10)
    title = wait.until(EC.presence_of_element_located((By.TAG_NAME, "h1"))).text
    print(title)
    
    driver.back()
    time.sleep(random.uniform(1, 2))

driver.quit()

关键注意事项

  • 反爬规避:Wallapop有反爬机制,频繁操作易触发验证或IP封禁,建议添加随机延迟、使用代理池,模拟真实用户的操作间隔
  • 元素定位适配:需根据页面实际HTML结构调整定位器(类名、data属性等),可通过浏览器开发者工具查看元素详情
  • 滚动加载处理:如果商品列表是滚动加载更多,需先模拟滚动到底部加载完所有商品,再进行遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:05:30