【问题标题】:lxml XPATH giving all elements instead of just the element under current nodelxml XPATH 给出所有元素,而不仅仅是当前节点下的元素
【发布时间】:2015-10-21 15:39:17
【问题描述】:

html是这样的:

<body>
<div class="div_a">
  <ul class="ul">
    <li>li</li>
    <li>li</li>
  </ul>
</div>
<div class="div_b">
  <a>link</a>
  <ul>
    <li>div_b li</li>
  </ul>
</div>
</body>

尝试获取div_a的李

node = page.xpath("//div[@class='div_a']")  
li1 = node.xpath("//li")

但是 li1 获得了页面中的所有 li 元素,而不仅仅是 div_a 的。我不知道问题是什么。

【问题讨论】:

    标签: python xpath lxml


    【解决方案1】:

    你的 XPATH - //li - 实际上是从根元素中获取元素,因此你得到了所有 li 。如果您只想获取 node 中的元素,则应提供相对 XPATH。示例 -

    li1 = node.xpath(".//li")
    

    上面的.表示当前元素,即div元素,class属性为'div_a'

    【讨论】:

    • 是的!知道了 !而且我知道 。表示当前元素或当前文件夹
    • 非常感谢您解决了我的语言问题^。 ^(我可怜的英语)祝你有美好的一天~~~
    • 很高兴能提供帮助! :-)
    【解决方案2】:

    将您的第二个 XPath 固定为相对的而不是绝对的,如 Anand suggests,或者首先使用单个 XPath 来获取 li 元素:

    li1 = page.xpath("//div[@class='div_a']//li") 
    

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2016-02-11
      相关资源
      最近更新 更多