1. ホーム
  2. パイソン

[解決済み】Pythonの文字列でHTMLエンティティをデコードしますか?

2022-03-26 11:51:47

質問

Beautiful Soup 3でHTMLを解析しているのですが、Beautiful Soup 3が自動的にデコードしてくれないHTMLエンティティが含まれているのですが、どうしたらいいですか?

>>> from BeautifulSoup import BeautifulSoup

>>> soup = BeautifulSoup("<p>&pound;682m</p>")
>>> text = soup.find("p").string

>>> print text
&pound;682m

のHTMLエンティティはどのようにデコードすればよいのでしょうか? text を取得するために "£682m" の代わりに "&pound;682m" .

解決方法は?

Python 3.4+

使用方法 html.unescape() :

import html
print(html.unescape('&pound;682m'))

ご参考まで html.parser.HTMLParser.unescape は非推奨であり は3.5で削除される予定でした。 間違って入ってしまったのですが。近々、言語から削除される予定です。


Python 2.6-3.3

を使用することができます。 HTMLParser.unescape() を標準ライブラリからダウンロードします。

>>> try:
...     # Python 2.6-2.7 
...     from HTMLParser import HTMLParser
... except ImportError:
...     # Python 3
...     from html.parser import HTMLParser
... 
>>> h = HTMLParser()
>>> print(h.unescape('&pound;682m'))
£682m

を使用することもできます。 six 互換ライブラリでインポートを簡略化することができます。

>>> from six.moves.html_parser import HTMLParser
>>> h = HTMLParser()
>>> print(h.unescape('&pound;682m'))
£682m