2013-02-28 8 views
9

PythonとBeautifulSoup 4ライブラリを使ってHTMLを処理していますが、 を空白で置き換える方法はありません。代わりに、Unicode非改行スペース文字に変換されるようです。BeautifulSoup 4を使用して " "のようなHTMLエンティティを置き換えたり削除したりするにはどうすればいいですか?

明らかなものがありませんか?交換する最もよい方法は何ですか& nbsp; BeautifulSoupを使用して通常のスペースで?

私は最新バージョンBeautifulSoup 4を使用していますので、Beautiful Soup 3のconvertEntities=BeautifulSoup.HTML_ENTITIESオプションは利用できません。

+2

しかし、それは破られていないスペースです... –

+0

はい、私は が改行されていないスペースであることを認識しています。だから、正しいことは、私が望むHTMLスニペットを取得してから、Unicode検索を実行して置き換えることです。私はそれが私が欲しいことをすると思う、私はちょうど古いconvertEntitiesオプションに相当すると思った。 –

答えて

8

マニュアルのEntitiesを参照してください。 BeautifulSoup 4は、すべてのエンティティに対して適切なUnicodeを生成します。

着信するHTMLエンティティまたはXMLエンティティは、常に対応するUnicode文字に変換されます。

はい、 は改行しない空白文字になります。あなたが本当にそれらを代わりにスペース文字にしたい場合は、ユニコードを置き換える必要があります。

15
>>> soup = BeautifulSoup('<div>a&nbsp;b</div>') 
>>> soup.prettify(formatter=lambda s: s.replace(u'\xa0', ' ')) 
u'<html>\n <body>\n <div>\n a b\n </div>\n </body>\n</html>' 
+0

これは、検索を行い、formatterを使用して置き換える優雅なアプローチです。しかし、私が@Martijn Pietersが答えているのを見ていなければ、それはちょっと不思議に思えるかもしれません。 –

2

私は単純に改行しないスペースをユニコードに置き換えます。

nonBreakSpace = u'\xa0' 
soup = soup.replace(nonBreakSpace, '') 

BeautifulSoupを使用していても利点はありません。

関連する問題