Я разбираю немного HTML с Beautiful Soup 3, но он содержит HTML-сущности, которые Beautiful Soup 3 автоматически не декодирует для меня:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Как я могу декодировать HTML-сущности, text
чтобы получить "£682m"
вместо "£682m"
.
Ответы:
Python 3.4+
Используйте
html.unescape()
:К вашему сведению
html.parser.HTMLParser.unescape
устарела, и должна была быть удалена в 3.5 , хотя она была оставлена по ошибке. Это будет удалено из языка в ближайшее время.Python 2.6-3.3
Вы можете использовать
HTMLParser.unescape()
из стандартной библиотеки:HTMLParser
html.parser
Вы также можете использовать
six
библиотеку совместимости, чтобы упростить импорт:источник
unescape
метода весьHTMLParser
модуль устарел в пользуhtml.parser
.h.unescape(s).encode("utf-8")
. Документы: "" "Представленное здесь определение содержит все объекты, определенные в XHTML 1.0, которые могут быть обработаны с помощью простой текстовой подстановки в наборе символов Latin-1 (ISO-8859-1)" ""Красивый Суп обрабатывает преобразование сущности. В Beautiful Soup 3 вам необходимо указать
convertEntities
аргумент дляBeautifulSoup
конструктора (см. Раздел « Преобразование сущностей» заархивированных документов). В Beautiful Soup 4 сущности декодируются автоматически.Красивый суп 3
Красивый суп 4
источник
BeautifulSoup4
используетHTMLParser
, в основном. Смотрите источникВы можете использовать replace_entities из библиотеки w3lib.html
источник
Beautiful Soup 4 позволяет вам установить форматер для вывода
источник
У меня была похожая проблема с кодировкой. Я использовал метод normalize (). Я получал ошибку Unicode, используя метод pandas .to_html () при экспорте моего фрейма данных в файл .html в другом каталоге. Я закончил тем, что делал это, и это работало ...
Объект dataframe может быть любым, назовем его таблицей ...
закодируйте данные таблицы, чтобы мы могли экспортировать их в файл .html в папке шаблонов (это может быть любое место, которое вы пожелаете :))
экспортировать нормализованную строку в HTML-файл
Ссылка: документация unicodedata
источник
Это, вероятно, здесь не актуально. Но чтобы исключить эти HTML-элементы из всего документа, вы можете сделать что-то вроде этого: (Допустим, document = page и, пожалуйста, простите неаккуратный код, но если у вас есть идеи, как сделать его лучше, я все слышу - я новичок в этот).
источник
.unescape()
делает это для вас . Я не понимаю, почему вы и Роб опубликовали эти слишком сложные решения, которые проверяют соответствие своих сущностей, когда принятый ответ уже ясно показывает, что.unescape()
можно найти сущности в строке.