Руководство по веб-парсингу с помощью 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
\r\n\r\n

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

\r\n\r\n

\r\n\r\n

Что такое Beautiful Soup?

\r\n\r\n

Beautiful 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

command line syntax for pip install beautifulsoup4 for Beautiful Soup Libraries in Python

\r\n\r\n

command line for installing html5lib using pip install for Python

\r\n\r\n

screenshot of syntax for pip install requests for 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

python code to import requests and then scrape a given URL

\r\n\r\n

Если вы получите ответ [200], это означает, что сайт ответил кодом ответа HTTP 200 OK и отправил нам HTML-содержимое страницы.

\r\n\r\n

Снова выполним тот же запрос, но на этот раз сохраним результат в переменной r и выведем ее содержимое.

\r\n\r\n

scraping using requests and saving the URL as a variable called r

\r\n\r\n

На выходе должен получиться весь HTML-код этой страницы. Как видите, он неструктурирован, и красивый суп поможет нам очистить его и получить нужные нам данные.

\r\n\r\n

Шаг 2: Теперь, когда у нас есть HTML-содержимое, необходимо разобрать данные. Для этого мы будем использовать beautiful soup с парсером html5lib.

\r\n\r\n

importing beautiful soup from bs4 - command line syntax

\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

nice chunk of scraped data using beautiful soup

\r\n\r\n

command line syntax for configuring a table in beautiful soup using python

\r\n\r\n

Выведем таблицу, чтобы лучше понять, что мы имеем на данный момент, и воспользуемся функцией .prettify()

\r\n\r\n

command line for displaying the table in the console using prettify

\r\n\r\n

Ваш результат должен выглядеть примерно так:

\r\n\r\n

Теперь мы ищем нужные нам данные. В данном примере нам нужен только цитируемый текст и имя автора. Как видите, все эти данные находятся по адресу

\r\n\r\n

Поэтому давайте пройдемся по всем экземплярам этого класса и получим все цитаты в нашей таблице.

\r\n\r\n

command line for looping through all the data to find the rows you need for the table

\r\n\r\n

Теперь у вас должны быть доступны только

\r\n\r\n

в каждом экземпляре цикла. Проверить это можно, выполнив print(row) в цикле.

\r\n\r\n

finding the alt-text inside the scraped data

\r\n\r\n

Мы ищем информацию по ключу "img alt", поэтому создадим переменную quote и присвоим ей эти данные.

\r\n\r\n

assigning data to the alt text

\r\n\r\n

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

\r\n\r\n

example of alt-attribute text being filled with the data provided

\r\n\r\n

Вот и все, вы закончили. Вот как теперь должна выглядеть ваша переменная котировок:

\r\n\r\n

 

\r\n\r\n

example of the data after it has applied the alt-text scrape

\r\n\r\n

В конце этого процесса вы можете сохранить данные в файле, и ваш код должен выглядеть примерно так:

\r\n\r\n

Screen shot of the final Python code and how it should look

\r\n