Декодировать объекты HTML в строке Python?

Я анализирую некоторый HTML с Красивым Супом 3, но он содержит объекты HTML, которые Красивый Суп 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".

238
задан Mark Amery 28 November 2015 в 10:18
поделиться

2 ответа

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 () из стандартной библиотеки:

>>> 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

Вы также можете использовать в шесть библиотеку совместимости, чтобы упростить импорт:

>>> from six.moves.html_parser import HTMLParser
>>> h = HTMLParser()
>>> print(h.unescape('&pound;682m'))
£682m
470
ответ дан 23 November 2019 в 03:21
поделиться

Красивый суп обрабатывает преобразование сущностей. В Beautiful Soup 3 необходимо указать аргумент convertEntities в конструкторе BeautifulSoup (см. раздел 'Преобразование сущностей' в архивных документах). В Beautiful Soup 4 сущности декодируются автоматически.

Beautiful Soup 3

>>> from BeautifulSoup import BeautifulSoup
>>> BeautifulSoup("<p>&pound;682m</p>", 
...               convertEntities=BeautifulSoup.HTML_ENTITIES)
<p>£682m</p>

Beautiful Soup 4

>>> from bs4 import BeautifulSoup
>>> BeautifulSoup("<p>&pound;682m</p>")
<html><body><p>£682m</p></body></html>
63
ответ дан 23 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: