一尘不染

解码Python字符串中的HTML实体?

html

我正在使用Beautiful Soup 3解析一些HTML,但是它包含HTML实体,Beautiful Soup 3不会自动为我解码:

>>> from BeautifulSoup import BeautifulSoup

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

>>> print text
&pound;682m

如何解码HTML实体text以获得"£682m"而不是"&pound;682m"


阅读 379

收藏
2020-05-13

共1个答案

一尘不染

Python 3.4以上用途html.unescape():

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

FYI html.parser.HTMLParser.unescape已过时,并且应该在3.5中删除,尽管它是错误地遗忘的。它将很快从语言中删除。

Python 2.6-3.3

您可以HTMLParser.unescape()从标准库中使用:

  • 对于python 2.6-2.7 HTMLParser
  • 对于Python 3 html.parser
>>> 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
2020-05-13