xpath中的跟随同级未按预期工作

2024-04-26 12:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用xapth从一些html元素中提取一部分文本,但似乎我出了问题,这就是为什么我做不到的原因。你知道吗

Html元素:

htmlelem = """
<div class="content">
    <p>Type of cuisine: </p>International
</div>
"""

我想使用xpath挖掘International。我知道如果我想用css selector提取相同的内容,我可以用.next_sibling获得成功,但我不想走这条路。你知道吗

也就是说,如果我这样尝试,我可以用xpath得到同样的结果:

tree.xpath("//*[@class='content']/p/following::text()")[0]

但是上面的表达式不是我想要的,因为如果我坚持使用driver.find_element_by_xpath(),就不能在seleniumwebdriver中使用相同的表达式

我唯一感兴趣的方法是如下,但它不起作用:

"//*[@class='content']/p/following::*"

现实生活中的例子:

from lxml.html import fromstring

htmlelem = """
<div class="content">
    <p>Type of cuisine: </p>International
</div>
"""
tree = fromstring(htmlelem)
item = tree.xpath("//*[@class='content']/p/following::text()")[0].strip()
elem = tree.xpath("//*[@class='content']/p/following::*")[0].text
print(elem)

在上面的示例中,我可以成功打印item,但无法打印elem。但是,我想修改elem中使用的表达式。你知道吗

如何使其工作,以便相同的xpath可以在lxml库或selenium中使用?


Tags: oftextdivtree元素表达式htmltype
1条回答
网友
1楼 · 发布于 2024-04-26 12:28:16

由于OP正在寻找一种从xpath外部提取文本的解决方案,下面应该这样做,尽管方式有些尴尬:

tree.xpath("//*[@class='content']")[0][0].tail

输出:

International

这种方法的需要是lxml解析html代码方式的结果: tree.xpath("//*[@class='content']")导致长度为1的list。 列表中的第一个(也是唯一一个)元素tree.xpath("//*[@class='content']")[0]是一个lxml.html.HtmlElement,它本身可以被视为一个列表,并且长度为1。你知道吗

在该lxml.html.HtmlElement中第一个(也是唯一一个)元素的tail中隐藏所需的输出。。。你知道吗

相关问题 更多 >