В этой статье мы обсудим:
- Как работает веб-скрапинг?
- Что такое Beautiful Soup?
- Как установить Requests и Beautiful Soup
- Шаги для парсинга на Python с Requests и Beautiful Soup
Как работает веб-скрапинг?
Веб-скрапинг – это способ получения определенных данных с целевой веб-страницы. Когда вы исследуете страницу, написанный код отправляет запрос на сервер, где она находится. Код загружает ее, извлекая элементы, указанные в задании сканирования.
Допустим, нам нужны целевые данные в тегах заголовка H3. Мы напишем код для парсера, который будет искать именно эту информацию. Он будет работать в три этапа:
Этап 1: Отправка запроса на сервер для загрузки содержимого сайта.
Шаг 2: Изучение HTML страниц для поиска нужных тегов H3.
Шаг 3: Копирование текста внутри целевых тегов, создание выходных данных в формате, указанном ранее в коде.
Задачи веб-скрапинга можно выполнять на многих языках программирования с помощью различных библиотек, но именно библиотека Beautiful Soup в Python – наиболее востребованный и эффективный метод. Ниже мы рассмотрим основы парсинга на Python с Beautiful Soup.
Что такое Beautiful Soup?
Beautiful Soup является библиотекой Python, которая анализирует документы HTML и XML. Она создает дерево разбора для проанализированных страниц, которое позволяет извлекать данные из HTML. Кроме того, автоматически преобразует документ в Юникод. Поэтому вам не придется думать о кодировках. Этот инструмент помогает не только парсить, но и очищать данные. Beautiful Soup поддерживает парсер HTML библиотеки Python и несколько сторонних: lxml или hml5lib.
Подробнее о возможностях читайте здесь: Документация по Beautiful Soup.
Как установить Requests и Beautiful Soup
Вам нужен pip или другой установщик Python. По желанию можете использовать свою лабораторию jupyter. В этой статье мы используем pip, так как он более удобный. Откройте терминал или Jupyter Lab и напишите:
Еще один способ – загрузить библиотеки вручную, перейдя по ссылке:
1: Requests
2: Hml5lib
Шаги для парсинга на Python с Requests и Beautiful Soup
Шаг 1: Вам нужно отправить HTTP-запрос на сервер страницы для парсинга. В ответ сервер отправит ее HTML-контент. Так как для запросов мы используем Python, нам нужна сторонняя HTTP-библиотека. Мы будем использовать Requests.
Начните с импорта библиотеки Requests и сделайте простой GET-запрос к URL. Мы выбрали https://www.brainyquote.com/topics/motivational-quotes, потому что он имеет простую структуру HTML и позволит легко продемонстрировать потенциал Beautiful Soup.
Если вы получаете ответ [200], это означает, что сайт ответил кодом ответа HTTP 200 OK и отправил нам HTML-содержимое страницы.
Getting blocked? Use our next-gen unblocking tech
Давайте снова сделаем тот же запрос, но на этот раз сохраним результат в переменной с именем r и выведем его содержимое.
На выходе должен быть весь HTML-код для этой страницы. Как видите, он не структурирован и Beautiful Soup поможет нам очистить его и получить нужные данные.
Шаг 2: Теперь, когда у нас есть HTML-контент, нам нужно проанализировать данные. Для этого мы будем использовать Beautiful Soup с парсером html5lib.Нам нужно передать два значения в BeautifulSoup():
#1: HTML-строка с сайта; ‘r.content’.
#2: Какой парсер HTML использовать; ‘html5lib’
Шаг 3: На данном этапе нужно перейти на сайт, с которого собираете информацию. Откройте Devtools (F12) и перейдите на вкладку Elements. Нам нужен верхний слой таблицы.
Давайте распечатаем таблицу, чтобы получить лучшее представление о том, что у нас есть, и воспользуемся .prettify().
Ваш вывод должен выглядеть примерно так:
Теперь ищем нужные вам данные. Для данного примера нам нужна только цитата и имя автора. Как видите, все эти данные находятся по адресу
Давайте пройдемся по всем экземплярам класса и получим цитаты в нашей таблице.
Теперь вам должны быть доступны только
в каждом экземпляре цикла. Вы можете проверить это, выполнив print(row) в цикле.
Мы ищем информацию под ключом “img alt”, поэтому давайте создадим переменную quote и присвоим ей эти данные.
Как вы видите, я завернул его в оператор ‘try’. В этом случае, если в одной из строк не будет искомых данных, вы не получите ошибку, и цикл будет продолжен. Я также разделил результаты на ‘-‘. Как вы видели ранее, текст и имя автора разделяются с помощью знака ‘-‘ Давайте используем его, чтобы разделить эти два знака.
Вот и все, вы закончили. Вот как теперь должна выглядеть ваша цитата:
В конце этого процесса вы можете сохранить свои данные в файл, и ваш код должен выглядеть примерно так:
Кредитная карта не требуется