Pythonを使用してHTMLをプレーンテキストにレンダリングする 質問する

Pythonを使用してHTMLをプレーンテキストにレンダリングする 質問する

BeautifulSoup を使用して HTML テキストのチャンクを変換しようとしています。次に例を示します。

<div>
    <p>
        Some text
        <span>more text</span>
        even more text
    </p>
    <ul>
        <li>list item</li>
        <li>yet another list item</li>
    </ul>
</div>
<p>Some other text</p>
<ul>
    <li>list item</li>
    <li>yet another list item</li>
</ul>

私は次のようなことをやってみました:

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)

...しかし、その方法では、span 要素は常に新しい行になります。これはもちろん単純な例です。Python で、HTML ページ内のテキストをブラウザーでレンダリングされる方法 (CSS ルールは必要なく、div、span、li などの要素がレンダリングされる通常の方法のみ) で取得する方法はありますか?

ベストアンサー1

BeautifulSoupはスクレイピングライブラリなので、HTMLレンダリングにはおそらく最適な選択肢ではありません。BeautifulSoupを使用する必要がない場合は、html2text。 例えば:

import html2text
html = open("foobar.html").read()
print html2text.html2text(html)

出力は次のようになります:

いくつかのテキスト、より多くのテキスト、さらにより多くのテキスト

  * リスト項目
  * さらに別のリスト項目

その他のテキスト

  * リスト項目
  * さらに別のリスト項目

おすすめ記事