Извлечение текста из HTML-тегов в Python: парсинг и вывод

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

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

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

Для очистки строки от HTML-тегов в Python вы можете использовать совмещение функций re.sub(), которая служит для поиска и затем удаления тегов, со встроенной функцией html.unescape() для преобразования HTML-сущностей:

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

strip_html = lambda text: unescape(re.sub('<[^<]+?>', '', text))
print(strip_html("<h1>Привет, <b>мир</b>!</h1>"))  
# Вывод: Привет, мир!

Таким образом, вы эффективно удаляете из строки всё, что относится к HTML, оставляя чистый текст.

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

Использование html.parser для детальной обработки

Если ваша задача требует более глубокого анализа содержимого HTML, обратите внимание на модуль html.parser, входящий в состав Python.

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

class MLStripper(HTMLParser):
    def __init__(self):
        super().__init__()
        self.strict = False
        self.convert_charrefs= True
        self.fed = []

    def handle_data(self, d):
        self.fed.append(d)

    def get_data(self):
        return ''.join(self.fed)

def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()

print(strip_tags("<h1>Привет, <b>мир</b>!</h1>"))  
# Вывод: Привет, мир!

BeautifulSoup для простоты использования

BeautifulSoup — это инструмент, который идеально сочетает в себе удобство использования и возможность гибкого подхода.

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

def strip_html_bs(html):
    soup = BeautifulSoup(html, "html.parser")
    return soup.get_text()

print(strip_html_bs("<h1>Привет, <b>мир</b>!</h1>"))  
# Вывод: Привет, мир!

BeautifulSoup отлично справляется с балансировкой между простотой и функциональностью, устраняя сложности, связанные с обработкой HTML.

Ограничения использования регулярных выражений

Регулярные выражения могут быть вполне подходящим решением для простых задач, однако они не годятся для работы с вложенными тегами и нестандартным HTML. Учтите это при выборе подхода.

Защита от распространенных проблем

Защита от XSS-атак

Важно ни в коем случае не путать удаление HTML с его санитизацией. Для того чтобы сохранить безопасный HTML и уберечься от XSS-атак, используйте такие инструменты, как MarkupSafe и Bleach.

Декодирование сущностей для красивого отображения текста

Не забывайте преобразовывать HTML-сущности в обычные символы, чтобы текст был легче восприниматься:

Python
Скопировать код
clean_text = strip_html("&lt;HTML&gt; сущности вроде &amp; декодируются&excl;")
print(clean_text)  
# Вывод: <HTML> сущности вроде & декодируются!

Обращение внимания на управляющие символы ASCII

Иногда бывает необходимым удалить управляющие символы ASCII для корректной обработки текста:

Python
Скопировать код
strip_control_chars = lambda text: ''.join(ch for ch in text if ch.isprintable())

С помощью этой операции вы избавляетесь от нежелательных символов, мешающих восприятию текста.

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

Процесс очистки текста можно представить как работу уборщика в городском парке:

Markdown
Скопировать код
Текстовый парк (🌳📃🌸🗑️🌳): "<div>Привет <b>мир</b>!</div>"

Уборщик (🛀) = HTML Стриппер

Markdown
Скопировать код
🛀✨🌳📃🌸🌳: "Привет мир!"

Он проезжает по парку, собирая HTML-мусор, и оставляет после себя чистый газон текста.

Создание гибких решений

Выбор метода удаления HTML зависит от конкретной задачи и условий работы.

Динамичность с помощью объектно-ориентированных решений

Если вам потребовалось решение для более сложных задач и лямбда-функция не подойдет, вы можете использовать класс MLStripper из модуля html.parser, настраиваемый для того, чтобы справиться с любыми трудностями.

Работа с файлами

Приведенные примеры можно легко адаптировать для работы с файлами, что облегчит обработку больших документов или массовое обслуживание несколько файлов одновременно.

Надёжность работы с некорректным HTML

BeautifulSoup и html.parser отлично справляются с некорректным HTML, что позволяет эффективно извлекать текст даже в ситуациях, где другие методы могут потерпеть неудачу.

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

  1. Документация Beautiful Soup — для понимания работы с Beautiful Soup при разборе HTML.
  2. re — Операции с регулярными выражениями — для изучения регулярных выражений в Python.
  3. Удаление HTML из строк в Python – Stack Overflow — подборка решений и примеров от сообщества.
  4. Документация Bleach — для понимания работы с инструментом очистки HTML и защиты от XSS-атак.
  5. html.parser — Простой HTML и XHTML парсер — для изучения работы с HTMLParser в Python.
  6. regex101 — сервис для создания, тестирования и отладки регулярных выражений.