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

解决Selenium爬虫中商品名称与缺失销量的匹配错位问题

解决Selenium爬取商品时销量缺失导致的匹配错位问题

你遇到的问题本质是两个列表长度不一致时,zip()会按最短的列表完成配对,导致没有销量的商品位置被跳过,后续的名称和销量完全错位。要解决这个问题,我们应该换个思路:先定位每个商品的独立容器,再从每个容器内单独提取名称和销量,这样就能保证每个商品的信息一一对应,缺失销量的直接填充"0"。

具体解决方案代码

首先需要导入NoSuchElementException来捕获元素不存在的情况,然后修改代码逻辑:

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException  # 导入异常类

# 初始化浏览器驱动(根据你的浏览器类型调整,比如Chrome/Firefox)
browserdriver = webdriver.Chrome()

# 每个商品的容器xpath,需根据页面实际结构确认(可通过浏览器开发者工具查看)
element_product = "//div[contains(@class, 'product-item')]"
link='https://www.sendo.vn/shop/dungcuykhoa_tanphu/san-pham/?p=1'
browserdriver.get(link)

# 获取所有商品的独立容器
all_products = browserdriver.find_elements_by_xpath(element_product)

for product in all_products:
    # 从当前商品容器内提取名称(使用相对路径.//)
    name = product.find_element_by_xpath(".//*[@class='name_product shop_color_hover']").text
    # 提取销量,不存在则填充"0"
    try:
        sold = product.find_element_by_xpath(".//*[@class='s_b']").text
    except NoSuchElementException:
        sold = "0"
    print(f"{name}:::{sold}")

print("program end")
browserdriver.quit()  # 记得关闭浏览器释放资源

关键说明

  1. 定位商品容器:element_product的xpath需要你根据页面实际HTML结构确认,比如在目标页面中,每个商品大概率包裹在class包含product-item的div里(可通过浏览器F12开发者工具查看元素结构)。找到这个共同父容器是核心,这样我们就能在每个容器内独立查询子元素。
  2. 相对路径查询:使用.//开头的xpath,表示从当前商品容器内部开始查找元素,而不是从整个文档根节点查找,彻底避免全局查找导致的元素混乱。
  3. 异常捕获:用try-except捕获NoSuchElementException,当某个商品没有销量元素时,直接将销量设置为"0",完美解决缺失值问题。

这样修改后,每个商品的名称和销量都会精准对应,再也不会出现错位的情况了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:53:23