beautiful soup 4 документация на русском

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

Статья ориентирована на новичков, таких же как и я.

Начало

Для начала разберем задачу. Взял я малоизвестный сайт новостей об Израиле, так как сам проживаю в этой стране, и хочется читать новости без рекламы и не интересных новостей. И так, имеется сайт, на котором постятся новости: есть новости помеченные красным, а есть обычные. Те что обычные — не представляют собой ничего интересного, а отмеченные красным являются самым соком. Рассмотрим наш сайт.

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

Как видите, сервер отдал нам красивый контейнер новостей (которых, кстати, больше чем на основном сайте, что нам на руку) без рекламы и мусора.

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

Как видим каждая новость лежит по-отдельности в тэге ‘a’ и имеет класс ‘lenta’. Если мы откроем тэг ‘a’, то заметим, что внутри есть тэг ‘span’, в котором находится класс ‘time2’, либо ‘time2 time3’, а также время публикации и после закрытия тэга мы наблюдаем сам текст новости.

Что отличает важную новость от неважной? Тот самый класс ‘time2’ или ‘time2 time3’. Новости помеченые ‘time2 time3’ и являются нашими красными новостями. Раз уж суть задачи понятна, перейдем к практике.

Практика

Для работы с парсерами умные люди придумали библиотеку «BeautifulSoup4», в которой есть еще очень много крутых и полезных функций, но об этом в следующий раз. Нам также понадобиться библиотека Requests позволяющая отправлять различные http-запросы. Идем их скачивать.

(убедитесь, что стоит последняя версия pip)

Переходим в редактор кода и импортируем наши библиотеки:

Для начала сохраним наш URL в переменную:

Теперь отправим GET()-запрос на сайт и сохраним полученное в переменную ‘page’:

Код вернул нам статус код ‘200’, значит это, что мы успешно подключены и все в полном порядке.

Теперь создадим два списка (позже я объясню для чего они нужны):

Самое время воспользоваться BeautifulSoup4 и скормить ему наш page, указав в кавычках как он нам поможет ‘html.parcer’:

Если попросить его показать, что он там сохранил:

Нам вылезет весь html-код нашей страницы.

Теперь воспользуемся функцией поиска в BeautifulSoup4:

Давайте разберём поподробнее, что мы тут написали.

В ранее созданный список ‘news’ (к которому я обещал вернуться), сохраняем все с тэгом ‘а’ и классом ‘news’. Если попросим вывести в консоль все, что он нашел, он покажет нам все новости, что были на странице:

Как видите, вместе с текстом новостей вывелись теги ‘a’, ‘span’, классы ‘lenta’ и ‘time2’, а также ‘time2 time3’, в общем все, что он нашел по нашим пожеланиям.

Тут мы в цикле for перебираем весь наш список новостей. Если в новости под индексом [i] мы находим тэг ‘span’ и класc ‘time2 time3’, то сохраняем текст из этой новости в новый список ‘new_news’.

Обратите внимание, что мы используем ‘.text’, чтобы переформатировать строки в нашем списке из ‘bs4.element.ResultSet’, который использует BeautifulSoup для своих поисков, в обычный текст.

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

Выведем наши данные:

Вот что мы получаем:

Мы получаем время публикации и лишь интересные новости.

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

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

Спасибо за внимание, был рад поделиться опытом.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

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

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

BeautifulSoup на примерах

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

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

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

Beautiful Soup

Beautiful Soup — это парсер для синтаксического разбора файлов HTML/XML, написанный на языке программирования Python, который может преобразовать даже неправильную разметку в дерево синтаксического разбора. Он поддерживает простые и естественные способы навигации, поиска и модификации дерева синтаксического разбора. В большинстве случаев он поможет программисту сэкономить часы и дни работы. Написанный на языке программирования Ruby порт называется Rubyful Soup.

Данный документ иллюстрирует основные возможности Beautiful Soup версии 3.0 на примерах. Вы увидите, для чего лучше использовать данную библиотеку, как она работает, как ее использовать, как добиться необходимых вам результатов и что делать, когда она не оправдывает ваших ожиданий.

Скачать Beautiful Soup можно здесь. Список изменений содержит отличия версии 3.0 от более ранних.

Подключить Beautiful Soup к вашему приложению можно с помощью одной из ниже приведенных строк:

Следующий код демонстрирует основные возможности Beautiful Soup. Можете скопировать его в сессию Python и запустить.

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

А вот как искать в супе определенные теги или теги с заданными атрибутами:

Изменять суп также весьма просто:

Приведем реальный пример. Скачаем ICC Commercial Crime Services weekly piracy report, произведем его синтаксический разбор с помощью Beautiful Soup и выведем на экран сообщения о случаях пиратства (piracy inc >

Для работы конструктору Beautiful Soup требуется документ XML или HTML в виде строки (или открытого файлоподобного объекта). Он произведет синтаксический разбор и создаст в памяти структуры данных, соответствующие документу.

Если обработать с помощью Beautiful Soup хорошо оформленный документ, то разобранная структура будет выглядеть также как и исходный документ. Но если его разметка будет содержать ошибки, то Beautiful Soup использует эвристические методы для построения наиболее подходящей структуры данных.

Синтаксический разбор HTML

Используйте класс BeautifulSoup для синтаксического разбора документа HTML. Несколько фактов, которые необходимо знать о BeautifulSoup:

Некоторые теги могут быть вложенными (

). Таблицы и списки тегов имеют естественный порядок вложенности. Например, теги

появляются только в обрамлении тегов и никак иначе. Содержимое тега

Обратите внимание на то, что BeautifulSoup вычисляет наиболее вероятные места для закрывающих тегов, даже если они отсутствуют в исходном документе.

Оцените статью