logo

Извлечение текста из HTML-файла в Python: обход JS и сущностей

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

Для быстрого извлечения текста из HTML-файла вы можете воспользоваться Python и библиотекой BeautifulSoup:

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

soup = BeautifulSoup(html_content, 'html.parser')
text = soup.get_text(strip=True)

print(text)  # И вот перед нами прекрасно чистый текст!

Установите библиотеку командой pip install beautifulsoup4 и начните пользоваться её возможностями. Метод get_text(strip=True) аккуратно удаляет все пробелы и HTML-теги, оставляя только необходимый текст.

Очистка от скриптов и стилей

Иногда HTML включает в себя такие элементы, как <script> или <style>, которые могут затруднить работу с текстом. Чтобы удалить их, можно действовать следующим образом:

Python
Скопировать код
for script_or_style in soup(["script", "style"]):
    script_or_style.decompose()  # "Python считает, что эти теги нам не по лицу".

clean_text = soup.get_text(strip=True)

В результате весь текст освободится от всех ненужных добавок и будет готов к использованию.

Справляемся с неоднородным HTML

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

Для борьбы со сложной структурой HTML пригодится мощный инструмент типа html2text:

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

text_maker = html2text.HTML2Text()
text_maker.ignore_links = True
text = text_maker.handle(html_content)

print(text)  # Неоднородный HTML для html2text уже не препятствие!

Надёжное извлечение текста с помощью html2text

При работе со сложным HTML html2text станет вашим надежным спутником. Эта библиотека умеет справляться с проблемами форматирования, сохраняя переносы строк и абзацы, и делает текст максимально приближённым к его оригинальному виду. Рекомендуется просмотреть GitHub-репозиторий, чтобы быть в курсе последних обновлений.

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

Процесс извлечения текста из HTML с использованием Python можно изобразить как отделение ненужных данных от важной информации:

Markdown
Скопировать код
HTML-файл: [<html>, <body>, <p>🍎</p>, <div>, <span>🍊</span>, <a>🍇</a>, </div>, </body>, </html>]
Отфильтрованный вывод: [🍎, 🍊, 🍇]
# "Одно яблоко в день – залог успеха программиста", – утверждает Python.

Данная визуализация иллюстрирует отбор только полезных данных, подобно сбору спелых фруктов.

Доработка текста после извлечения

Для дальнейшего улучшения текста можно применить регулярные выражения:

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

# Пример: удаление назойливых URL из текста
cleaner_text = re.sub(r'http\S+', '', clean_text)

print(cleaner_text)  # Все URL исчезли, как будто их и не было.

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

Пользовательское извлечение с помощью _DeHTMLParser

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

Python
Скопировать код
from _DeHTMLParser import dehtml

dehtml_parser = dehtml()
extracted_text = dehtml_parser.text(html_content)

print(extracted_text)  # "_DeHTMLParser работает легко и непринуждённо".

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

  1. Документация Beautiful Soup — ваш союзник в простом разборе HTML с помощью Python.
  2. Requests: HTTP for Humans™ — инструмент, который делает запросы HTML простыми и понятными.
  3. lxml — хорошая альтернатива другим библиотекам для работы со XML и HTML в Python.
  4. re — Операции с регулярными выражениями — ключ к детальному извлечению текста.
  5. HTML Standard — чтение обязательно для глубокого осмысления HTML.
  6. Beautiful Soup: Создание веб-скрейпера на Python – Real Python — отличное практическое руководство.