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)
出力は次のようになります:
いくつかのテキスト、より多くのテキスト、さらにより多くのテキスト * リスト項目 * さらに別のリスト項目 その他のテキスト * リスト項目 * さらに別のリスト項目