lxml XPATH 给出所有元素,而不仅仅是当前节点下的元素

lxml XPATH giving all elements instead of just the element under current node

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 的 li

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

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

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

li1 = node.xpath(".//li")
上面的

. 表示当前元素,即具有 class 属性的 div 元素,如 'div_a'.

将您的第二个 XPath 修复为相对的而不是绝对的 ,或者简单地使用单个 XPath 来首先获取 li 元素:

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