BeautifulSoup – парсинг HTML в Python на примерах

Beautifulsoup парсинг HTML

Данная инструкция по BeautifulSoup является вводным руководством по использованию библиотеки BeautifulSoup Python. В примерах показано использование тегов, модификация документа и перебор его элементов, а также парсинг веб-страниц.

Содержание статьи

BeautifulSoup на примерах

BeautifulSoup является библиотекой Python для парсинга HTML и XML документов. Часто используется для скрапинга веб-страниц. BeautifulSoup позволяет трансформировать сложный HTML-документ в сложное древо различных объектов Python. Это могут быть теги, навигация или комментарии.

Установка BeautifulSoup в Python

Для установки необходимых модулей используется команда pip3.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Для начала требуется установить lxml модуль, который используется в BeautifulSoup.

BeautifulSoup устанавливается при помощи использования указанной выше команды.

Пример HTML-кода страницы

В последующих примерах будет использован данный HTML-файл:

BeautifulSoup простой пример парсинга HTML

В первом примере будет использован BeautifulSoup модуль для получения трех тегов.

Код в данном примере позволяет вывести HTML-код трех тегов.

Здесь производится импорт класса BeautifulSoup из модуля bs4. Таким образом, BeautifulSoup является главным рабочим классом.

Открывается файл index.html и производится чтение его содержимого при помощи метода read().

Создается объект BeautifulSoup. Данные передаются конструктору. Вторая опция уточняет объект парсинга.

Далее выводится HTML-код следующих двух тегов: h2 и head.

В примере много раз используются элементы li, однако выводится только первый из них.

Это результат вывода.

BeautifulSoup теги, атрибуты name и text

Атрибут name указывает на название тега, а атрибут text указывает на его содержимое.

Код в примере позволяет вывести HTML-код, название и текст h2 тега.

Это результат вывода.

BeautifulSoap перебираем HTML теги

Метод recursiveChildGenerator() позволяет перебрать содержимое HTML-документа.

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

Данные теги являются частью рассматриваемого HTML-документа.

BeautifulSoup атрибут children

При помощи атрибута children можно вывести все дочерние теги.

В данном примере извлекаются дочерние элементы html тега, после чего они помещаются в список Python и выводятся в консоль. Так как атрибут children также убирает пробелы между тегами, необходимо добавить условие, которое позволяет выбирать только названия тегов.

Следовательно, у тегов html есть два дочерних элемента: head и body.

BeautifulSoup атрибут descendants

При помощи атрибута descendants можно получить список всех потомков (дочерних элементов всех уровней) рассматриваемого тега.

Данный пример позволяет найти всех потомков главного тега body.

Перечисленные выше теги являются потомками главного тега body.

BeautifulSoup и веб-скрапинг HTML

Requests является простой HTTP библиотекой в Python. Она позволяет использовать разнообразные методы для получения доступа к веб-ресурсам при помощи HTTP.



Данный пример извлекает название рассматриваемой веб-страницы. Здесь также выводится имя ее родителя.

Здесь мы получаем информацию о веб-странице.

Код выше помогает вывести HTML-код заголовка, его текст, а также HTML-код его родителя.

Это результат вывода.

BeautifulSoup метод prettify()

При помощи метода prettify() можно добиться того, чтобы HTML-код выглядел аккуратнее.

Таким образом, мы оптимизируем HTML-код простой веб-страницы.

Это результат вывода.

BeautifulSoup метод find(), поиск элементов по id

При помощи метода find() можно найти элементы страницы, используя различные опорные параметры, id в том числе.

Код в примере находит тег ul, у которого id mylist. Строка в комментарии является альтернативным способом выполнить то же самое задание.

BeautifulSoup метод find_all() поиск всех тегов в HTML

При помощи метода find_all() можно найти все элементы, которые соответствуют заданным критериям.

Код в примере позволяет найти и вывести на экран все li теги.

Это результат вывода.

Метод find_all() также при поиске использует список из названий тегов.

В данном примере показано, как найти все h2 и p элементы, после чего вывести их содержимое на экран.

Метод find_all() также может использовать функцию, которая определяет, какие элементы должны быть выведены.

Данный пример выводит пустые элементы.

Единственным пустым элементом в документе является meta.

Также можно найти запрашиваемые элементы, используя регулярные выражения.

В данном примере выводится содержимое элементов, в которых есть строка с символами ‘BSD’.

Это результат вывода.

BeautifulSoup методы select() и select_one() CSS селекторы

При помощи методов select() и select_one() для нахождения запрашиваемых элементов можно использовать некоторые CSS селекторы.

В данном примере используется CSS селектор, который выводит на экран HTML-код третьего по счету элемента li.

Данный элемент li является третьим в списке.

В CSS символ # используется для выбора тегов по их id-атрибутам.

В данном примере выводятся элементы, которых есть id под названием mylist.

BeautifulSoup метод append() добавление нового HTML-тега

Метод append() добавляет в рассматриваемый HTML-документ новый тег.

В примере выше показано, как в HTML-документ добавить новый тег li.

Для начала, требуется создать новый тег при помощи метода new_tag().

Далее создается сноска на тег ul.

Затем созданный ранее тег li добавляется к тегу ul.

Таким образом, тег ul выводится аккуратно отформатированным.

BeautifulSoup метод insert() вставка HTML-тега

Метод insert() позволяет вставить тег в определенно выбранное место.

В примере показано, как поставить тег li на третью позицию в выбранном ul теге.

BeautifulSoup метод replace_with() замена текста в теге

Метод replace_with() заменяет содержимое выбранного элемента.

В примере показано, как при помощи метода find() найти определенный элемент, а затем, используя метод replace_with(), заменить его содержимое.

BeautifulSoup метод decompose() удаление HTML-тега

Метод decompose() удаляет определенный тег из структуры документа и уничтожает его.

В данном примере показано, как удалить второй элемент p в документе.

В данном руководстве было показано, как использовать библиотеку BeautifulSoup в Python.