65

Pythonを使用してhtmlブロックをテキストに変換しようとしています。

入力:

<div class="body"><p><strong></strong></p>
<p><strong></strong>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. <a href="http://example.com/" target="_blank" class="source">Some Link</a> Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p></div>

必要な出力:

Lorem ipsum dolorはアメットに座り、consectetueradipiscingelitです。Aenean commodo ligulaegetdolor。アエネアンマッサ

Consectetueradipiscingelit。いくつかのリンクAeneanコモドリグラegetdolor。アエネアンマッサ

Aenean massa.Lorem ipsum dolor sit amet、consectetueradipiscingelit。Aenean commodo ligulaegetdolor。アエネアンマッサ

Lorem ipsum dolorはアメットに座り、consectetueradipiscingelitです。Aenean commodo ligulaegetdolor。アエネアンマッサ

Consectetueradipiscingelit。Aenean commodo ligulaegetdolor。アエネアンマッサ

html2text私はあまり成功せずにモジュールを試しました:

#!/usr/bin/env python

import urllib2
import html2text
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('http://example.com/page.html').read())

txt = soup.find('div', {'class' : 'body'})

print(html2text.html2text(txt))

オブジェクトは上記txtのhtmlブロックを生成します。テキストに変換して画面に印刷したいのですが。

4

13 に答える 13

109

soup.get_text()あなたが望むものを出力します:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
print(soup.get_text())

出力:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa

改行を保持するには:

print(soup.get_text('\n'))

例と同じにするために、改行を 2 つの改行に置き換えることができます。

soup.get_text().replace('\n','\n\n')
于 2013-02-04T20:06:25.120 に答える
25

Python標準を使用して可能html.parserです:

from html.parser import HTMLParser

class HTMLFilter(HTMLParser):
    text = ""
    def handle_data(self, data):
        self.text += data

f = HTMLFilter()
f.feed(data)
print(f.text)
于 2019-04-24T08:03:53.837 に答える
6

正規表現を使用できますが、お勧めしません。次のコードは、データ内のすべての HTML タグを削除して、テキストを取得します。

import re

data = """<div class="body"><p><strong></strong></p>
<p><strong></strong>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. <a href="http://example.com/" target="_blank" class="source">Some Link</a> Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p></div>"""

data = re.sub(r'<.*?>', '', data)

print(data)

出力

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
于 2013-02-04T20:02:51.347 に答える
4

'\n'段落の間に改行を挿入します。

from bs4 import Beautifulsoup

soup = Beautifulsoup(text)
print(soup.get_text('\n'))
于 2013-02-04T20:11:08.527 に答える