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
相关产品推荐
相关产品推荐

