Как декодировать HTML сущности в строке Python: Beautiful Soup 3

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Декодирование HTML-сущностей в Python осуществляется с помощью функции html.unescape(). Эта функция заменяет HTML-сущности, такие как &amp; или &lt;, на их текстовое представление — символы & и <.

Пример использования:

Python
Скопировать код
import html

decoded_str = html.unescape('Привет &amp; мир!')
# Выведет: 'Привет & мир!'

Всё очень просто и не требует дополнительных библиотек.

Кинга Идем в IT: пошаговый план для смены профессии

Что еще я могу сделать?

HTML-сущности можно встретить в местах, где их не ожидаешь, и они могут быть очень разнообразны. В зависимости от конкретной ситуации могут быть нужны разные подходы к их обработке.

Не те сущности, которые искали (до Python 3.4)

До версии Python 3.4 широко использовался метод HTMLParser.unescape(). Если вам требуется работать со старым кодом, вероятно, вам стоит его знать:

Python
Скопировать код
from HTMLParser import HTMLParser
parser = HTMLParser()
decoded_str = parser.unescape('Привет &amp; мир!')
# Выведет: 'Привет & мир!'

Обратите внимание: этот метод устарел начиная с версии Python 3.5. Рекомендуется использовать html.unescape().

Может понадобиться Beautiful Soup?

При работе с библиотекой Beautiful Soup 4 можно воспользоваться встроенным способом обработки HTML-сущностей:

Python
Скопировать код
from bs4 import BeautifulSoup

soup = BeautifulSoup('Привет &amp; мир!', 'html.parser')
decoded_str = soup.text
# Выведет: 'Привет & мир!'

Третья сторона медали

Ещё один подход — использование метода replace_entities из библиотеки w3lib.html. Это достаточно нетрадиционный подход, но он эффективно справляется даже с самыми сложными случаями:

Python
Скопировать код
from w3lib.html import replace_entities

decoded_str = replace_entities('Привет &amp; мир!')
# Выведет: 'Привет & мир!'

Во имя Unicode

При работе с Unicode предпочтение отдается использованию модуля unicodedata и его функции normalize:

Python
Скопировать код
import unicodedata

unicode_str = unicodedata.normalize('NFKD', 'Привет &amp; мир!')
# Выведет: 'Привет & мир!'

Будьте внимательны: при импорте данных возможны Unicode-ошибки.

Совместимость — наше всё

Для совместной работы с Python 2 и 3 может быть полезна библиотека six:

Python
Скопировать код
from six.moves import html_parser

decoded_str = html_parser.HTMLParser().unescape('Привет &amp; мир!')
# Выведет то же, что наш главный пример: 'Привет & мир!'

Коварные сущности

HTML-сущности бывают замаскированы под числовые коды, специальные символы или буквы с акцентами. Но мы можем справиться с этим.

Работа с числами и символами

HTML-сущности бывают числовыми и символьными. Будьте готовы к встрече с ними:

Python
Скопировать код
decoded_num = html.unescape('&#123;')  # Разгадана загадка фигурной скобки!
decoded_sym = html.unescape('&euro;')  # Найдена монета евро!

Как успешно оседлать буквы с акцентами

Буквы с акцентами также могут быть закодированы. Но ваш текст останется в сохранности:

Python
Скопировать код
decoded_accent = html.unescape('Caf&eacute;')  # Что скажем на отдых с кофе?

Хранители целостности данных

Основная ваша задача – обеспечить сохранность закодированных и декодированных данных, предотвращая их повреждение.

Визуализация

Python позволяет расшифровать скрытые сообщения в тексте, закодированные с помощью HTML-сущностей, словно открывая секретный шифр.

Markdown
Скопировать код
Закодированный текст: "Быстрая коричневая лиса прыгает через ленивую собаку &amp; и живет долго и счастливо."

Применим Python для декодирования сообщения:

Python
Скопировать код
import html

decoded_text = html.unescape(encoded_text)

И вот, секреты раскрыты:

Markdown
Скопировать код
Декодированный текст: "Быстрая коричневая лиса прыгает через ленивую собаку & и живет долго и счастливо."

Так, декодирование HTML-сущностей превращается в настоящее исследование скрытых посланий. Кто знает, какие загадки вы раскроете?

Полезные материалы

  1. Поддержка HyperText Markup Language — документация Python 3.12.1 — ваш гид по HTML-сущностям в Python.
  2. Декодирование HTML-сущностей в строке Python? – Stack Overflow – собрание различных решений проблемы декодирования.
  3. HTML Character Entities – W3Schools — шпаргалка по HTML-сущностям.
  4. Документация Beautiful Soup — Beautiful Soup 4.12.0 — подробное руководство по парсингу HTML с помощью Beautiful Soup.
  5. lxml – Обработка XML и HTML в Python — официальный сайт библиотеки lxml, это мощный инструмент для обработки XML и HTML.
  6. Entity – MDN Web Docs Глоссарий — информация о HTML-сущностях от MDN.
  7. Список символьных ссылок XML и HTML – Wikipedia — исчерпывающий справочник по HTML-сущностям.