如何使用 xpath & lxml 获取节点的完整内容?

sig*_*nce 5 html python xpath lxml

我正在使用 lxml 的 xpath 函数来检索网页的一部分。我正在尝试获取<font>标签的内容,其中包括它自己的 html 标签。如果我使用

//td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]
Run Code Online (Sandbox Code Playgroud)

我得到了适量的节点,但它们作为 lxml 对象 ( <Element font at 0x101fe5eb0>)返回。

如果我使用

//td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]/text()
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的东西,只是我没有得到任何包含在<font>节点中的 HTML 代码。

如果我使用

//td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]/node()
Run Code Online (Sandbox Code Playgroud)

如果混合了 text 和 lxml 元素!(例如something something <Element a at 0x102ac2140> something

有没有办法使用纯 XPath 查询来获取<font>节点的内容,甚至强制 lxml 从.xpath()方法中返回内容的字符串,而不是 lxml 对象?

请注意,我从 XPath 查询返回了许多节点的列表,因此解决方案需要支持它。

只是为了澄清......我想something something <a href="url">inside</a> something从类似......

<font face="verdana" color="#ffffff" size="2"><a href="url">inside</a> something</font>
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 3

我不确定我是否理解——这是否接近您正在寻找的内容?

import lxml.etree as le
import cStringIO
content='''\
<font face="verdana" color="#ffffff" size="2"><a href="url">inside</a> something</font>
'''
doc=le.parse(cStringIO.StringIO(content))

xpath='//font[@face="verdana" and @color="#ffffff" and @size="2"]/child::*'
x=doc.xpath(xpath)
print(map(le.tostring,x))
# ['<a href="url">inside</a> something']
Run Code Online (Sandbox Code Playgroud)