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

基于XPath提取含<b>标签(文本为SKU)的<li>标签内容的问题

解决SKU标签对应的
  • 内容提取(含不存在场景处理)
  • 嘿,我来帮你搞定这个XPath提取的问题!针对你要提取包含<b>SKU</b>的<li>标签里的"1TVN-11",同时处理该<li>不存在的情况,我分场景给你具体方案:

    1. 先根据HTML结构写精准的XPath

    首先得明确你的HTML结构,常见的两种情况对应不同的XPath:

    场景A:SKU标签和目标文本在同一个<li>内(无其他嵌套元素)

    比如HTML结构是:

    <li><b>SKU</b>: 1TVN-11</li>
    

    用这个XPath可以精准提取SKU后的文本(自动忽略空格、换行):

    //li[b[normalize-space(text())='SKU']]/normalize-space(substring-after(., normalize-space(b/text())))
    

    如果你的<b>标签里带冒号(比如<b>SKU:</b>),把'SKU'改成'SKU:'就行,或者用contains(b/text(), 'SKU')来模糊匹配(适合SKU标签有额外字符的情况)。

    场景B:目标文本在<li>下的子元素里

    比如HTML结构是:

    <li><b>SKU</b><span class="sku-value">1TVN-11</span></li>
    

    直接定位到子元素提取:

    //li[b[normalize-space(text())='SKU']]/span/text()
    

    2. 处理<li>不存在的情况

    不管用哪种XPath,当目标<li>不存在时,XPath处理器会返回空集合(比如Python的lxml、Java的JAXB都是如此)。你只需要在代码里判断返回结果是否为空,给个默认值即可。

    举个Python+LXML的示例代码:

    from lxml import html
    
    # 假设your_html_content是你的HTML源码
    tree = html.fromstring(your_html_content)
    # 替换成你对应的XPath
    sku_xpath = "//li[b[normalize-space(text())='SKU']]/normalize-space(substring-after(., normalize-space(b/text())))"
    sku_results = tree.xpath(sku_xpath)
    
    # 处理不存在的情况
    if sku_results:
        target_sku = sku_results[0]
    else:
        target_sku = "SKU未找到"  # 这里可以换成你需要的默认值
    

    3. 小技巧提升稳定性

    • 用normalize-space()处理所有文本节点,避免因为HTML里的换行、多余空格导致匹配失败;
    • 如果页面里有多个包含SKU的<li>,可以用[1]限定取第一个,比如//li[b[normalize-space(text())='SKU']][1]/...;
    • 尽量不要用太宽泛的匹配(比如//li[contains(., 'SKU')]),容易误匹配到其他包含SKU文本的<li>。

    内容的提问来源于stack exchange,提问作者Israr ul haq

    相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.05.19 09:15:28