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")
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 修复为相对的而不是绝对的 li
元素:
li1 = page.xpath("//div[@class='div_a']//li")