Как декодировать HTML сущности в строке Python: Beautiful Soup 3
Быстрый ответ
Декодирование HTML-сущностей в Python осуществляется с помощью функции html.unescape()
. Эта функция заменяет HTML-сущности, такие как &
или <
, на их текстовое представление — символы &
и <
.
Пример использования:
import html
decoded_str = html.unescape('Привет & мир!')
# Выведет: 'Привет & мир!'
Всё очень просто и не требует дополнительных библиотек.
Что еще я могу сделать?
HTML-сущности можно встретить в местах, где их не ожидаешь, и они могут быть очень разнообразны. В зависимости от конкретной ситуации могут быть нужны разные подходы к их обработке.
Не те сущности, которые искали (до Python 3.4)
До версии Python 3.4 широко использовался метод HTMLParser.unescape()
. Если вам требуется работать со старым кодом, вероятно, вам стоит его знать:
from HTMLParser import HTMLParser
parser = HTMLParser()
decoded_str = parser.unescape('Привет & мир!')
# Выведет: 'Привет & мир!'
Обратите внимание: этот метод устарел начиная с версии Python 3.5. Рекомендуется использовать html.unescape()
.
Может понадобиться Beautiful Soup?
При работе с библиотекой Beautiful Soup 4 можно воспользоваться встроенным способом обработки HTML-сущностей:
from bs4 import BeautifulSoup
soup = BeautifulSoup('Привет & мир!', 'html.parser')
decoded_str = soup.text
# Выведет: 'Привет & мир!'
Третья сторона медали
Ещё один подход — использование метода replace_entities
из библиотеки w3lib.html
. Это достаточно нетрадиционный подход, но он эффективно справляется даже с самыми сложными случаями:
from w3lib.html import replace_entities
decoded_str = replace_entities('Привет & мир!')
# Выведет: 'Привет & мир!'
Во имя Unicode
При работе с Unicode предпочтение отдается использованию модуля unicodedata
и его функции normalize:
import unicodedata
unicode_str = unicodedata.normalize('NFKD', 'Привет & мир!')
# Выведет: 'Привет & мир!'
Будьте внимательны: при импорте данных возможны Unicode-ошибки.
Совместимость — наше всё
Для совместной работы с Python 2 и 3 может быть полезна библиотека six
:
from six.moves import html_parser
decoded_str = html_parser.HTMLParser().unescape('Привет & мир!')
# Выведет то же, что наш главный пример: 'Привет & мир!'
Коварные сущности
HTML-сущности бывают замаскированы под числовые коды, специальные символы или буквы с акцентами. Но мы можем справиться с этим.
Работа с числами и символами
HTML-сущности бывают числовыми и символьными. Будьте готовы к встрече с ними:
decoded_num = html.unescape('{') # Разгадана загадка фигурной скобки!
decoded_sym = html.unescape('€') # Найдена монета евро!
Как успешно оседлать буквы с акцентами
Буквы с акцентами также могут быть закодированы. Но ваш текст останется в сохранности:
decoded_accent = html.unescape('Café') # Что скажем на отдых с кофе?
Хранители целостности данных
Основная ваша задача – обеспечить сохранность закодированных и декодированных данных, предотвращая их повреждение.
Визуализация
Python позволяет расшифровать скрытые сообщения в тексте, закодированные с помощью HTML-сущностей, словно открывая секретный шифр.
Закодированный текст: "Быстрая коричневая лиса прыгает через ленивую собаку & и живет долго и счастливо."
Применим Python для декодирования сообщения:
import html
decoded_text = html.unescape(encoded_text)
И вот, секреты раскрыты:
Декодированный текст: "Быстрая коричневая лиса прыгает через ленивую собаку & и живет долго и счастливо."
Так, декодирование HTML-сущностей превращается в настоящее исследование скрытых посланий. Кто знает, какие загадки вы раскроете?
Полезные материалы
- Поддержка HyperText Markup Language — документация Python 3.12.1 — ваш гид по HTML-сущностям в Python.
- Декодирование HTML-сущностей в строке Python? – Stack Overflow – собрание различных решений проблемы декодирования.
- HTML Character Entities – W3Schools — шпаргалка по HTML-сущностям.
- Документация Beautiful Soup — Beautiful Soup 4.12.0 — подробное руководство по парсингу HTML с помощью Beautiful Soup.
- lxml – Обработка XML и HTML в Python — официальный сайт библиотеки lxml, это мощный инструмент для обработки XML и HTML.
- Entity – MDN Web Docs Глоссарий — информация о HTML-сущностях от MDN.
- Список символьных ссылок XML и HTML – Wikipedia — исчерпывающий справочник по HTML-сущностям.