Руководство по веб-парсингу с помощью BeautifulSoup
Как работает веб-парсинг?
\r\n\r\nПарсин гвеб-страницы означает запрос определенных данных с целевой веб-страницы. При парсировании страницы написанный вами код отправляет запрос на сервер, на котором находится целевая страница. Затем код загружает страницу, извлекая только те элементы страницы, которые были определены изначально в задании на поиск.
\r\n\r\nНапример, допустим, нам нужны данные в тегах заголовков H3. Мы напишем код для парсера, который будет искать именно эту информацию. Работа парсера будет состоять из трех этапов:
\r\n\r\n- \r\n\t
- Шаг 1. Отправка запроса на сервер для загрузки содержимого сайта. \r\n\t
- Шаг 2. Фильтр HTML страницы для поиска нужных тегов H3. \r\n\t
- Шаг 3. Копирование текста внутри целевых тегов с получением результата в формате, заранее указанном в коде. \r\n
Задачи веб-парсинга можно решать на многих языках программирования с использованием различных библиотек, но использование Python с библиотекой Beautiful Soup является одним из наиболее популярных и эффективных методов. В следующих разделах мы рассмотрим основы парсинга на Python с использованием Beautiful Soup.
\r\n\r\n
Что такое Beautiful Soup?
\r\n\r\nBeautiful Soup предоставляет простые методы для навигации, поиска и модификации дерева разбора в HTML- и XML-файлах. Он преобразует сложный HTML-документ в дерево объектов Python. Кроме того, он автоматически преобразует документ в Unicode, так что вам не придется задумываться о кодировках. Этот инструмент помогает не только соскабливать, но и очищать данные. Beautiful Soup поддерживает парсер HTML, входящий в стандартную библиотеку Python, но также поддерживает несколько парсеров Python сторонних разработчиков, например lxml или hml5lib.
\r\n\r\nУстановка Requests и Beautiful Soup
\r\n\r\nДля установки Beautiful Soup вам понадобится pip или любой другой инсталлятор Python. Вы также можете использовать свою лабораторию jupyter. В этом посте мы будем использовать pip, так как он наиболее удобен. Откройте терминал или Jupyter Lab и напишите:Синтаксис командной строки для pip install beautifulsoup4 для библиотек Beautiful Soup на Python
\r\n\r\nПростые шаги для парсинга в Python с помощью Requests и Beautiful Soup
\r\n\r\nШаг 1: Необходимо отправить HTTP-запрос на сервер страницы, которую вы хотите спарсить. В ответ сервер отправляет HTML-содержимое веб-страницы. Поскольку мы используем Python для отправки запросов, нам нужна сторонняя HTTP-библиотека, и мы будем использовать Requests.
\r\n\r\nНачнем с импорта библиотеки Requests и выполнения простого GET-запроса к URL - мы выбрали https:\/\/www.brainyquote.com\/topics\/motivational-quotes, поскольку он имеет простую HTML-структуру и позволит нам легко продемонстрировать
\r\n\r\nЕсли вы получите ответ [200], это означает, что сайт ответил кодом ответа HTTP 200 OK и отправил нам HTML-содержимое страницы.
\r\n\r\nСнова выполним тот же запрос, но на этот раз сохраним результат в переменной r и выведем ее содержимое.
\r\n\r\nНа выходе должен получиться весь HTML-код этой страницы. Как видите, он неструктурирован, и красивый суп поможет нам очистить его и получить нужные нам данные.
\r\n\r\nШаг 2: Теперь, когда у нас есть HTML-содержимое, необходимо разобрать данные. Для этого мы будем использовать beautiful soup с парсером html5lib.
\r\n\r\nНам необходимо передать в BeautifulSoup() два значения:
\r\n\r\n#1: HTML-строка с сайта; 'r.content'
\r\n\r\n#2: Какой HTML-парсер использовать; 'html5lib'
\r\n\r\nШаг 3: На данном этапе необходимо перейти на сайт, с которого производится парсинг. Откройте Devtools (F12) и перейдите на вкладку Elements. Мы будем искать верхний слой таблицы.
\r\n\r\nВыведем таблицу, чтобы лучше понять, что мы имеем на данный момент, и воспользуемся функцией .prettify()
\r\n\r\nВаш результат должен выглядеть примерно так:
\r\n\r\nТеперь мы ищем нужные нам данные. В данном примере нам нужен только цитируемый текст и имя автора. Как видите, все эти данные находятся по адресу
\r\n\r\nПоэтому давайте пройдемся по всем экземплярам этого класса и получим все цитаты в нашей таблице.
\r\n\r\nТеперь у вас должны быть доступны только
\r\n\r\nв каждом экземпляре цикла. Проверить это можно, выполнив print(row) в цикле.
\r\n\r\nМы ищем информацию по ключу "img alt", поэтому создадим переменную quote и присвоим ей эти данные.
\r\n\r\nКак видите, мы обернули его в оператор 'try'. В этом случае, если в одной из строк не окажется искомых данных, не возникнет ошибки, и цикл продолжит работу. Мы также разделили результаты на '-'. Как вы видели ранее, текст и имя автора разделяются с помощью знака '-' Давайте воспользуемся этим, чтобы разделить эти два знака и разделить их.
\r\n\r\nВот и все, вы закончили. Вот как теперь должна выглядеть ваша переменная котировок:
\r\n\r\n\r\n\r\n
В конце этого процесса вы можете сохранить данные в файле, и ваш код должен выглядеть примерно так:
\r\n\r\n

