我有一个HTML文件:
<html>
<p>somestr
<sup>1</sup>
anotherstr
</p>
</html>
我想将文本提取为:
somestr 1 anotherstr
但我无法弄明白该怎么做。我写了一个to_sup()
函数将数字字符串转换为上标,所以我得到的最接近的是:
for i in doc.xpath('.//p/text()|.//sup/text()'):
if i.tag == 'sup':
print to_sup(i),
else:
print i,
但我ElementStringResult
似乎没有获取标记名称的方法,所以我有点迷失。任何想法如何解决?
答案 0 :(得分:8)
第一个解决方案(连接没有分隔符的文本 - 另见python [lxml] - cleaning out html tags):
import lxml.html
document = lxml.html.document_fromstring(html_string)
# internally does: etree.XPath("string()")(document)
print document.text_content()
这个帮助了我 - 连接我需要的方式:
from lxml import etree
print "\n".join(etree.XPath("//text()")(document))
答案 1 :(得分:3)
只是不要在XPath中的text()
节点上调用sup
。
for x in doc.xpath("//p/text()|//sup"):
try:
print(to_sup(x.text))
except AttributeError:
print(x)