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

Selenium爬虫如何通过XPath借助i标签精准提取li内目标文本

解答

完全可以通过li内部i标签的class属性精准定位你需要的两个属性值,这种定位方式不会抓到无关内容,完全适配你当前的页面结构。
你之前的代码问题出在XPath只匹配了所有li的通用classvehicle-item__attribute-item,没有加筛选条件,自然会把页面上百个同class的无关li全部抓回来。

正确定位方法

你只需要在XPath里追加子节点i的class匹配规则,就能精准命中目标li,不需要遍历所有li再判断:

# 注意:旧版Selenium可以直接用find_element_by_xpath方法,替换下面的XPath字符串即可
from selenium.webdriver.common.by import By

# 提取变速箱类型Manual
trans_ele = driver.find_element(
    By.XPATH,
    '//li[@class="vehicle-item__attribute-item" and ./i[contains(@class, "icon-specs-transmission-gray")]]'
)
transmission = trans_ele.text.strip().strip('"')

# 提取载客数4 People
passenger_ele = driver.find_element(
    By.XPATH,
    '//li[@class="vehicle-item__attribute-item" and ./i[contains(@class, "icon-specs-passenger-gray")]]'
)
passenger_capacity = passenger_ele.text.strip().strip('"')

如果后续需要提取更多同类型属性,可以把需要匹配的i标签class放到列表里循环抓取,不用重复写定位逻辑:

target_icon_classes = ["icon-specs-transmission-gray", "icon-specs-passenger-gray"]
result_list = []
for cls in target_icon_classes:
    ele = driver.find_element(
        By.XPATH,
        f'//li[@class="vehicle-item__attribute-item" and ./i[contains(@class, "{cls}")]]'
    )
    # 处理文本前后的空白和自带的双引号
    clean_text = ele.text.strip().strip('"')
    result_list.append(clean_text)

这里用contains匹配i标签的class,是因为i标签同时带icon和具体属性图标两个class,用contains容错性更高,就算后续页面调整class顺序、追加新的class值,也不会定位失败。提取文本后加strip('"')是因为你给出的HTML里目标文本自带双引号,处理后就能拿到干净的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:17