我有一个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似乎没有办法获取标签名称,所以我有点迷失.任何想法如何解决?
第一个解决方案(连接没有分隔符的文本 - 另见python [lxml] - 清除html标签):
   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))
只是不要调用text()XPathsup中的节点。
for x in doc.xpath("//p/text()|//sup"):
    try:
        print(to_sup(x.text))
    except AttributeError:
        print(x)