BeautifulSoup - это библиотека Python, которая предназначена для парсинга HTML-страниц. С её помощью можно извлекать данные из HTML-кода, например, тексты, ссылки, изображения, таблицы и многое другое. Библиотека умеет работать с различными типами парсера, включая встроенные в Python, а также с парсерами сторонних библиотек, таких как lxml.

Для начала работы с BeautifulSoup, необходимо установить его. Это можно сделать, выполнив команду в командной строке: pip3 install beautifulsoup4

После установки можно импортировать библиотеку и начать работу с HTML-кодом:

import requests
from bs4 import BeautifulSoup

# URL страницы для парсинга
url = '<https://habr.com/ru/>'

# Отправляем GET-запрос на указанный URL и сохраняем ответ в переменную response
response = requests.get(url)

# Преобразуем ответ в объект BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Находим все заголовки статей на странице и сохраняем их в переменную headers
headers = soup.find_all('a', {'class': 'tm-title__link'})

# Выводим заголовки всех статей
for header in headers:
    print(header.text)

В этом примере мы отправляем GET-запрос на главную страницу habr.com, затем создаем объект BeautifulSoup для обработки полученного HTML-кода. Далее мы находим все заголовки статей на странице и сохраняем их в переменную headers, а затем выводим их на экран.

┌──(kali㉿kali)-[~]
└─$ python3 test.py
УЦСБ и Positive Technologies успешно завершили внедрение PT Application Firewall в рамках импортозамещения
Игра на опережение
AI Doomism (ChatGPT & ИИ-истерия)
«Нанософт» 15 лет. От nanoCAD к инженерной экосистеме
Secure by Design: с чего начинается безопасность продукта
Преобразуем карты DOOM в SVG для лазерной резки
Рецепт установки ПОЛИНОМ:MDM под Linux
Голь на выдумки хитра или как сэкономить более 200 тыс.руб на изготовлении собственого оборудования
Клиент-серверное и межсервисное взаимодействие: разбираемся в REST, GraphQL, RPC и WebSocket
Встречаем сценарии умного дома Яндекса, которые сработают даже без интернета
Бионическая рука. Больше, чем  протез
«Прозрачный промоушн выгоден и разработчику, и его тимлиду». Нюансы карьеры разработчика на С++
Приложение для инженеров на Flutter
Гетерогенная распределенная система как способ миграции больших и не очень баз данных с MSSQL Server на PostgreSQL
Новое приложение Lemon8 от ByteDance рвет топы американского AppStore. Разбираемся, как оно устроено
Оптимизация настройки Webpack проекта на CRA
КПП в кармане: как мы автоматизировали контроль доступа на территорию с нуля
Добавляем SPDIF в легендарный Roland MT-32
Философские вопросы интернационализации веб-приложений
Vivaldi 6.0 — Пространство для творчества

Теперь рассмотрим более сложный пример, в котором мы будем парсить страницы с блогами на habr.com и извлекать оттуда название статьи, автора и дату публикации.

import requests
from bs4 import BeautifulSoup

# URL страницы для парсинга
url = '<https://habr.com/ru/top/>'

# Отправляем GET-запрос на указанный URL и сохраняем ответ в переменную response
response = requests.get(url)

# Преобразуем ответ в объект BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Находим все блоги на странице и сохраняем их в переменную blogs
blogs = soup.find_all('article', {'class': 'tm-articles-list__item'})

# Проходимся по каждому блогу и извлекаем название, автора и дату публикации
for blog in blogs:
    title = blog.find('a', {'class': 'tm-title__link'}).text.strip()
    author = blog.find('span', {'class': 'tm-user-info__user'}).text.strip()
    date = blog.find('span', {'class': 'tm-article-datetime-published'}).text.strip()

    # Выводим извлеченные данные на экран
    print(f'Название статьи: {title}\\nАвтор: {author}\\nДата публикации: {date}\\n')

В этом коде мы сначала загружаем страницу с блогами на habr.com с помощью модуля requests, а затем используем модуль BeautifulSoup, чтобы распарсить HTML-код. Затем мы используем метод find_all, чтобы найти все статьи на странице с помощью тега article и его класса tm-articles-list__item.

Далее мы перебираем каждую статью и извлекаем из нее название, автора и дату публикации с помощью метода find и соответствующих тегов и классов. Метод text используется для извлечения текстового содержимого элементов, а метод strip - для удаления лишних пробелов и переносов строк.

Наконец, мы выводим извлеченные данные на экран, используя метод print.

┌──(kali㉿kali)-[~]
└─$ python3 test.py
Название статьи: Automation in mobile QA testing
Автор: AppQuantum
       16 hours ago
Дата публикации: 16 hours ago

Название статьи: Compiling fast .exe console applications with PHP 8.1, why not?
Автор: kovalensky
        Apr  8  at 13:19
Дата публикации: Apr  8  at 13:19

Название статьи: Langton's ant: a mystery cellular automaton
Автор: AKlimenkov
        Apr  1  at 12:31
Дата публикации: Apr  1  at 12:31

Название статьи: Array of weak in Swift
Автор: Leschev
        Apr  1  at 12:21
Дата публикации: Apr  1  at 12:21

Название статьи: GNU radio 802.11 black box optimization
Автор: VasyaPal
        Mar  31  at 22:10
Дата публикации: Mar  31  at 22:10

Название статьи: Not 'Doom' ported
Автор: quaer
        Mar  23  at 22:58
Дата публикации: Mar  23  at 22:58

Название статьи: About «free» #iam, #oidc, #saml, #etc
Автор: korkin25
        Mar  22  at 21:28
Дата публикации: Mar  22  at 21:28

Название статьи: The Collatz conjecture is the greatest math trick of all time
Автор: AKlimenkov
        Mar  21  at 18:13
Дата публикации: Mar  21  at 18:13

Название статьи: Tutorial. Onchain Analysis basics
Автор: pazlvbanke
        Mar  17  at 13:08
Дата публикации: Mar  17  at 13:08

Название статьи: Cross-Platform System Programming Guide for UNIX & Windows: Level 1
Автор: simonzolin
        Mar  17  at 09:21
Дата публикации: Mar  17  at 09:21

Название статьи: Journey to find a headset with a good side talk cancellation mic for calls in an open office
Автор: Murz
        Mar  17  at 09:04
Дата публикации: Mar  17  at 09:04

Название статьи: PostgreSQL 16: Part 4 or CommitFest 2023-01
Автор: kaze_no_saga
        Mar  10  at 16:27
Дата публикации: Mar  10  at 16:27

Название статьи: Onchain Analysis in Simple Terms
Автор: pazlvbanke
        Mar  9  at 16:48
Дата публикации: Mar  9  at 16:48

Название статьи: What is Information Technologies? Hard to gets in? Choosing a direction/profession and your first programming language
Автор: mastervlados
        Mar  6  at 15:56
Дата публикации: Mar  6  at 15:56

Название статьи: Autofill input fields in Android WebView
Автор: chugunovr
        Mar  5  at 21:44
Дата публикации: Mar  5  at 21:44

Название статьи: Microfrontend. Server fragments — frontend as it supposed to be
Автор: EgorVoronov
        Mar  5  at 21:42
Дата публикации: Mar  5  at 21:42

Название статьи: Writing The Matrix in Python: easy guide
Автор: AKlimenkov
        Mar  4  at 19:33
Дата публикации: Mar  4  at 19:33

Название статьи: DSL (domain-specific language) implementation with macros
Автор: rsashka
        Mar  4  at 14:42
Дата публикации: Mar  4  at 14:42

Название статьи: Use of Python to write plugins for GIMP
Автор: AmiraB2
        Mar  4  at 14:38
Дата публикации: Mar  4  at 14:38

Название статьи: Will transport planners lose their jobs as AI becomes smarter?
Автор: Badianov
        Mar  1  at 02:14
Дата публикации: Mar  1  at 02:14