使用lxml.html提取文本

时间:2012-12-17 10:38:38

标签: python lxml

我有一个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似乎没有获取标记名称的方法,所以我有点迷失。任何想法如何解决?

2 个答案:

答案 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)