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

Selenium爬取雅虎奇摩商城仅首页可获取href 调整XPath能否解决

问题原因
  • 原XPath仅适配店铺首页DOM结构:你最初写的linkPath路径里的MainListing__StoreBoothWrap类节点,仅存在于你注释标注的店铺首页,带pg参数的搜索结果分页的商品列表父节点类名完全不同,定位逻辑直接失效,所以返回空列表,无法提取到链接。
  • 缺少懒加载触发逻辑:雅虎奇摩搜索结果页商品采用滚动懒加载渲染机制,你仅设置了隐式等待,页面打开后如果没有触发滚动操作,未进入视口的商品不会渲染到DOM树中,也会导致提取数量不全甚至完全提取不到。
解决方案

调整XPath完全可以实现全分页批量采集,只要编写适配所有搜索结果分页的通用定位规则即可,具体修改方案如下:

1. 替换通用XPath

搜索结果全分页的商品a标签统一带有SearchResultItem__wrapper类,直接用这个特征定位即可,避免多层节点依赖,稳定性远高于原始嵌套路径:
linkPath = "//a[contains(@class, 'SearchResultItem__wrapper')]"

2. 补充懒加载触发逻辑

页面加载完成后执行滚动到页面底部的操作,等待1-2秒让所有商品渲染完成再执行定位。

修改后可运行代码

!pip install selenium
from selenium import webdriver
import time

browser = webdriver.Chrome(executable_path='./chromedriver.exe')
browser.implicitly_wait(5)

# 可自行修改range范围实现全分页采集
for page in range(1, 6): # 示例采集前5页
    url = f"https://tw.mall.yahoo.com/search/product?p=%E5%B1%88%E8%87%A3%E6%B0%8F&pg={page}"
    browser.get(url)
    # 滚动到底部触发懒加载
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(1)
    # 全分页通用定位XPath
    linkPath = "//a[contains(@class, 'SearchResultItem__wrapper')]"
    product_links = browser.find_elements_by_xpath(linkPath)
    print(f"第{page}页提取到商品链接数量:{len(product_links)}")
    for link in product_links:
        print(link.get_attribute("href"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:10