我正在用Beautiful Soup 3解析一些HTML,但它包含了Beautiful Soup 3不会自动解码的HTML实体:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
我如何解码文本中的HTML实体以获得“6.82亿英镑”而不是“&英镑;6.82亿”。
Python 3 + 4。
使用html.unescape ():
import html
print(html.unescape('£682m'))
仅供参考,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('£682m'))
£682m
你也可以使用6个兼容性库来简化导入:
>>> from six.moves.html_parser import HTMLParser
>>> h = HTMLParser()
>>> print(h.unescape('£682m'))
£682m
Beautiful Soup 4允许您为输出设置格式化程序
如果传入formatter=None, Beautiful Soup将不会修改字符串
完全没有输出。这是最快的选择,但它可能会导致
Beautiful Soup生成无效的HTML/XML,如以下示例所示:
print(soup.prettify(formatter=None))
# <html>
# <body>
# <p>
# Il a dit <<Sacré bleu!>>
# </p>
# </body>
# </html>
link_soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
print(link_soup.a.encode(formatter=None))
# <a href="http://example.com/?foo=val1&bar=val2">A link</a>