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

问题:

我用美丽的汤3解析一些HTML,但它包含美丽的汤3不会为我自动解码的HTML实体:

>>> from BeautifulSoup import BeautifulSoup

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

>>> print text
&amp;pound;682m

如何解码text中的HTML实体来获取"£682m"而不是"&pound;682m"

回答:

Python 3.4+

 HTMLParser.unescape已被弃用,was supposed to be removed in 3.5虽然遗漏了错误。它将很快从语言中删除。而是使用html.unescape()

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

https://docs.python.org/3/library/html.html#html.unescape

Python 2.6-3.3

您可以使用标准库中的HTML解析器:

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

http://docs.python.org/2/library/htmlparser.html
您还可以使用six兼容性库来简化导入:

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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Decode HTML entities in Python string?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

60 − 52 =