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)
我不确定我是否理解——这是否接近您正在寻找的内容?
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)