9

我有一个 HTML 文件:

<html>
    <p>somestr
        <sup>1</sup>
       anotherstr
    </p>
</html>

我想将文本提取为:

somestr 1另一个

但我不知道该怎么做。我编写了一个to_sup()将数字字符串转换为上标的函数,所以我得到的最接近的是:

for i in doc.xpath('.//p/text()|.//sup/text()'):
    if i.tag == 'sup':
        print to_sup(i),
    else:
        print i,

但是我ElementStringResult似乎没有获取标签名称的方法,所以我有点迷茫。任何想法如何解决它?

4

2 回答 2

9

第一个解决方案(连接没有分隔符的文本 - 另见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))
于 2014-05-29T08:48:10.180 回答
3

只是不要调用XPathtext()中的sup节点。

for x in doc.xpath("//p/text()|//sup"):
    try:
        print(to_sup(x.text))
    except AttributeError:
        print(x)
于 2012-12-17T10:43:27.617 回答