Извлечение HTML-строки из объекта bs4 в Python

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

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

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

Извлечение HTML из объекта BeautifulSoup возможно двумя методами: с помощью soup.prettify(), возвращающем отформатированный HTML, и str(soup), который возвращает неотформатированную строку HTML. На практике это выглядит так:

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

# Предположим, у нас есть объект BeautifulSoup – 'soup'...
print(soup.prettify())  # Отформатированный HTML
print(str(soup))        # HTML в виде неотформатированной строки
Кинга Идем в IT: пошаговый план для смены профессии

Детальный разбор

Разберёмся, каким образом можно извлечь содержимое HTML с использованием BeautifulSoup.

Извлечение текста и тегов

Вы можете отделить текст от тегов или извлечь определённые теги следующим образом:

Python
Скопировать код
# Выведем только текст, исключая теги
print(soup.get_text())

# Выведем содержимое конкретного тега
print(soup.find('span')) # Как часто вы сталкиваетесь со span в своем "супе"?

Особенности различных методов

Помимо этого, обратите внимание на разницу в работе следующих методов:

  • soup.prettify() добавляет в код переносы строк и отступы для удобства чтения. Он предназначен для создания красивого представления кода.
  • str(soup) возвращает HTML в исходном виде, без дополнительного форматирования. Это, можно сказать, прямолинейный подход.

Обработка специальных символов

Заботьтесь о корректной кодировке, если вы работаете с необычными символами:

Python
Скопировать код
# Преобразуем вывод в кодировку UTF-8
print(soup.prettify().encode('utf-8')) # Готовы к международному формату

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

Представьте себе строителя (👷), который по чертежам (📃), представляющим собой объект Beautiful Soup, строит веб-страницу:

Markdown
Скопировать код
👷‍♂️ Строитель: "Хм... Этот чертёж что-то прямо особенное. Понятно, это объект Beautiful Soup!"
📃 Чертёж: [Объект Beautiful Soup с HTML-элементами и их структурой]

Из строительных материалов получается окончательное здание (🏰) — это наш HTML-код:

Markdown
Скопировать код
🏰 Готовая конструкция: "<!DOCTYPE html><html>...</html>"
# И вот перед вами — объект Beautiful Soup в виде превосходной HTML-структуры!

Иль простым языком :

HTML
Скопировать код
BeautifulSoupObject -> 👷‍♂️ -> 🏰 -> 'Готовый HTML'

Это описывает процесс преобразования объекта Beautiful Soup в HTML-код.

Подсказки и советы

Навигация по HTML-структуре

Методы .contents или .children позволят вам навигировать по структуре HTML:

Python
Скопировать код
# Дочерние элементы объекта soup 
print(soup.contents)

# Все дочерние элементы объекта soup, рекурсивно
for child in soup.children:
    print(child) # Когда-нибудь думали, что у супа могут быть дети?

Обращение к атрибутам

Для того чтобы получить атрибуты, вроде id, class или data-атрибуты, используйте синтаксис обращения к словарю:

Python
Скопировать код
# Обращение к атрибуту 'id' первого элемента div
print(soup.find('div')['id']) # Ищете ID для div? Вот он!

Обработка неполных тегов

Иногда теги могут быть неполными или вовсе отсутствовать. BeautifulSoup отлично справляется и с такими случаями:

Python
Скопировать код
# Парсинг неполного HTML
soup = BeautifulSoup("<div><p>Ой, а где закрывающий тег?", 'html.parser')
print(soup.prettify()) # Недостающие теги найдены и добавлены.

Работа с комментариями и скриптами

Комментарии и скрипты также можно удалять и обрабатывать:

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

# Удаление всех комментариев
comments = soup.findAll(text=lambda text: isinstance(text, Comment))
[comment.extract() for comment in comments] # До свидания, комментарии!

# Поиск тегов script
script_tags = soup.find_all('script') # Если они вам не по душе, просто избавьтесь от них!

Полезные ресурсы

  1. Официальная документация Beautiful Soup — основной источник информации по всем вопросам, связанным с Beautiful Soup.
  2. Учебник по Beautiful Soup: создание веб-скрейпера на Python от Real Python — отличный ресурс для тех, кто хотел бы изучить сбор данных из сети с использованием Beautiful Soup и Python.
  3. Веб-скрапинг с использованием Beautiful Soup и Requests: учебный курс на YouTube от Кори Шафера — видеокурс, в котором детально рассказывается о основах веб-скрапинга и использовании Beautiful Soup.
  4. Практическое руководство по извлечению содержимого HTML с помощью Beautiful Soup на Python от DigitalOcean — с помощью этого руководства вы сможете освоить практическое применение Beautiful Soup.
  5. Статья на Medium о способах извлечения атрибутов, текста и HTML с помощью Beautiful Soup на Towards Data Science — интересное чтение для тех, кто работает с Beautiful Soup.
  6. Краткое руководство по началу работы с Beautiful Soup — полезное руководство для начинающих разработчиков, только начинающих знакомиться с HTML-парсингом.