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

