9

私は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ないようで、少し迷ってしまいました。それを解決する方法はありますか?

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 に答える