1 of 24

Основы�программирования�с Beautifulsoup4

2 of 24

Требования

  • Python 3.7.0+
  • Любой редактор кода (VS Code, PyCharm, Python IDLE)
  • Библиотеки Beautifulsoup4, requests

3 of 24

Введение

  • Beautifulsoup4 – библиотека Python, предназначенная для парсинга HTML и XML документов. Сокращённо её можно называть bs4.
  • Почему она так называется? Происходит от детской стихотворной строки.

4 of 24

Зачем нужен bs4

Сферы применения веб-парсинга сегодня охватывает все области современного бизнеса.

  • Маркетинг
  • Финансовая аналитика
  • Научные исследования

Помимо этого библиотеку bs4 можно применять и повседневности, не используя парсинг огромных веб-страниц, а писать собственные мини-скрипты или приложения.

5 of 24

Установка Beautifulsoup4

VS Code�В терминале пропишите команду�pip install beautifulsoup4�pip install requests

Python IDLE�Нажмите сочетание клавиш Win+R и напишите cmd�Пропишите �pip install beautifulsoup4�pip install requests

6 of 24

Принцип работы

  • Получение HTML: Получение HTML-документа со страницы через библиотеку requests
  • Построение дерева документа: Beautifulsoup4 разбирает документ и строит DOM-подобное дерево
  • Навигация: Данные извлекаются через
    1. Теги (методы find, find_all и другие)
    2. Атрибуты
    3. CSS-селекторы (select)
  • Поиск и фильтрация: Библиотека bs4 может находить элементы по имени тега, классу, атрибутам, тексту
  • Извлечение данных: После нахождения требующейся информации – получаем её

7 of 24

DOM-Дерево

8 of 24

Основной код

Код с запросом web-страницы

Код с ручным заданием HTML-кода

9 of 24

Базовый поиск по тегам

Представим, что у нас есть следующий HTML-код:

<html> � <body> � <h1>Заголовок</h1>� <p>Первый абзац.</p>� <p>Второй абзац.</p>� </body>�</html>

Вид в браузере

10 of 24

Базовый поиск по тегам

11 of 24

Важно

  • Метод find() – находит первый найденный тег
  • Метод find_all() – ищет подходящие теги и формирует из них список
  • Каждый найденный тег – это объект, из которого можно получить
    1. .text (текст)
    2. .get(‘href’) (атрибуты)
    3. .name (имя тега)
    4. Вложенные элементы

12 of 24

Работа с атрибутами

Bs4 позволяет работать с атрибутами тегов. Например, в коде HTML присутствует гиперссылка

<a href=‘https://example.com’>Ссылка</a>

Тег «a» имеет атрибут «href», который мы можем получить.

Пример:

link = soup.find(“a”)�print(link[“href”])

Помимо href можно производить поиск по другим атрибутам, например id, target, datatype и др.

13 of 24

Работа с атрибутами

На страницах, помимо сплошного текста, присутствуют и изображения. �С помощью библиотеки requests можно сохранять их в виде файла.

14 of 24

Фильтрация результатов

  • Bs4 позволяет фильтровать результаты поиска, что значительно упрощает работу с огромными документами
  • Фильтрацию можно осуществлять с помощью поиска атрибутов или методом select

15 of 24

Фильтрация по классу

Представим, что у нас следующий HTML-код:

<html>� <body>� <ul>� <li class=“item”>Элемент 1</li>� <li class=“item”>Элемент 2</li>� <li class=“other”>Элемент 3</li>

</ul>� </body>�</html>

16 of 24

Фильтрация по классу

В данном примере 2 элемента списка имеют класс item, последний – other

17 of 24

Задание

Соберите названия фильмов, которые будут показывать сегодня в выбранном кинотеатре. Выведите их в консоли.

  • Возьмём для задания сайт Яндекс Афиша
  • Перейдите по ссылке https://afisha.yandex.ru/yekaterinburg/cinema/places/grinvich-sinema?source=rubric&place-schedule-preset=today
  • Используйте код элемента (F12) для изучения HTML-документа

18 of 24

Код программы

19 of 24

Важный момент

Использование User-Agent: В примерах кода используется прямой запрос requests.get(url)

Некоторые современные сайты блокируют запросы без заголовков (headers), так как они выглядят как боты.

20 of 24

Веб-этика

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

  • Задержки time.sleep(), чтобы не создавать чрезмерную нагрузку
  • Использование User-Agent, для обозначения, что мы человек, �а не бот

21 of 24

Метод select

Bs4 поддерживает метод select, что делает фильтрацию ещё более удобной.

Пример использования:��items = soup.select(‘ul li’)�for item in items:� print(item.text)��Тем самым мы получаем все элементы <li> внутри <ul>

22 of 24

Проверки и debug

Перед тем, как обращаться к элементу, следует проверить, существует ли он

Пример:

element = soup.find(‘div’)�if element:� print(element.text)�else:� print(‘Элемент не найден’)

Также это можно делать с помощью оператор try-except

23 of 24

Другие примеры использования

  • Парсинг сайта новостей news.ycombinator.com

24 of 24

Спасибо за внимание