CoderCastrov logo
CoderCastrov
Selenium

Как оценить сложность задачи по парсингу веб-страницы?

Как оценить сложность задачи по парсингу веб-страницы?
просмотров
6 мин чтение
#Selenium

Краткое изложение

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

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

Введение

В своем пути в качестве специалиста по обработке данных, занимающегося проектами в области маркетинга и электронной коммерции, иногда мне задают вопросы, на которые мне нужно найти ответы на основе данных.

Среди таких вопросов:

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

Для ответа на эти вопросы первым шагом является поиск подходящих данных, обычно о рынке/конкурентах, на которых мы можем провести анализ.

После определения этого источника мы можем начать думать о процессе сбора данных. Некоторые интернет-магазины/веб-сайты предлагают официальные API или партнерства для сбора данных, поэтому они позволяют доступ через платные планы. Однако эта опция не всегда доступна, и иногда мы можем прибегнуть к парсингу веб-страниц в качестве варианта для создания наборов данных для наших проектов.

У этого варианта, конечно, есть свои ограничения как технические, так и этические, так как веб-сайты обычно используют инструменты против ботов, чтобы идентифицировать роботов, пытающихся массово собирать их данные. Кроме того, с этической точки зрения продажа данных через API является источником дохода для целевых веб-сайтов, поэтому обходить его с помощью парсеров может быть вредным для них.

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

1. Запрос URL-адресов с помощью Python

Первый способ заключается в отправке запросов "get" или "post" с помощью скрипта на Python и сборе исходного кода HTML результирующей страницы.

Затем вывод разбирается в соответствии с структурой HTML-страницы для создания структурированного набора данных.

Для этой техники используются пакеты Python requests и BeautifulSoup. Простой фрагмент кода может выглядеть следующим образом:

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
html = response.text

soup = BeautifulSoup(html, "html.parser")

# Парсинг HTML и построение структурированного набора данных
# ...

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

2. Создание бота с помощью Selenium

Идея здесь заключается в создании бота, который имитирует взаимодействие человека с веб-сайтом, включая посещение страниц веб-сайта, прокрутку вниз, нажатие на различные элементы... Часто используемым фреймворком здесь является Selenium, который служит инструментом для взаимодействия с браузером с использованием Python (или других языков программирования). Selenium был разработан как фреймворк для автоматизации тестирования. Однако в нашем контексте мы можем использовать его возможности для открытия и взаимодействия с веб-страницами. После загрузки страницы мы можем получить ее HTML-код и использовать Beautiful Soup для его парсинга и создания структурированного набора данных.

Вот хороший туториал от Абхая Парашара, в котором описываются основные возможности Selenium для парсинга.


3. Какую технику следует выбрать?

Оба метода позволяют автоматизировать процесс сбора данных, поэтому в целом мы можем достичь одинаковых результатов с помощью обоих методов, либо получая все URL-адреса страниц из исходного кода HTML (первый метод), либо автоматизируя действия и клики человека в браузере (второй метод).

Первый подход имеет преимущество в скорости, особенно если мы можем найти простую логику для сбора всех URL-адресов страниц, которые мы хотим спарсить. Однако в случаях, когда для загрузки дополнительных сообщений требуются клики или прокрутка, подход RPA с использованием Selenium намного проще, так как URL-адреса не появятся непосредственно в исходном коде, когда мы запрашиваем главную страницу веб-сайта.

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

4. Как оценить сложность задачи парсинга?

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

  • Требуется ли аутентификация для получения информации? Это можно определить при посещении веб-сайта и его различных страниц, некоторые веб-сайты могут запросить идентификацию перед продолжением навигации. В этом случае мы должны обратить внимание на количество запросов и объем собираемых данных, так как нас легко могут идентифицировать и заблокировать.
  • Использует ли целевой веб-сайт технологии анти-парсинга или обнаружения ботов? Некоторые веб-сайты ограничивают количество запросов, поступающих из одного источника, используя простые ограничения по IP или используя капчу и внешние сервисы, такие как Cloudflare. Это усложняет задачу парсинга, так как нам нужно использовать ротационные прокси (для скрытия IP), разные заголовки (для имитации разных браузеров) и иногда несколько попыток перед тем, как мы сможем достичь веб-страницы.
Cloudflare asking to fill captcha
  • Сколько данных мы соберем с одного запроса? Чем меньше количество запросов, тем проще будет задача парсинга. Фактически, увеличение количества запросов повышает риск идентификации как бота и, следовательно, блокировки (если не использовать техники, описанные в предыдущем пункте). Например, один запрос на страницу поиска товаров на Amazon позволит собрать до 16 записей. Некоторые веб-сайты позволяют увеличить это значение с помощью параметра и, следовательно, собрать большее количество записей с одним запросом.
Posts that could be collected with a single search query
  • Имеет ли информация хорошую структуру? В некоторых случаях, изучая записи, мы можем обнаружить, что некоторые атрибуты отсутствуют. Следовательно, идентификаторы порядка/позиции могут изменяться от одной записи к другой. Обратите внимание, например, на изображение ниже, что некоторые записи могут иметь рейтинг продукта, а другие - нет. Та же логика применяется к дате доставки. Это нужно учитывать при разработке логики разбора, ориентируясь на имена атрибутов, а не на индексы или позиции.
Missing attributes in posts
  • Есть ли особые шаблоны/макет страницы для некоторых конкретных продуктов? Некоторые розничные веб-сайты используют совершенно другой макет страницы для новых продуктов или для отображения результатов рекомендательной системы. Очевидно, что общий код не сможет разобрать такие специфические случаи. Поэтому использование сообщений журнала является важным для обнаружения сбоев парсера и соответствующих действий. В зависимости от бизнес-кейса мы можем решить обработать или отбросить конкретные случаи.
Recommended products are shown in different layout

После рассмотрения вышеперечисленного чек-листа мы должны получить представление о сложности задачи парсинга. Затем мы можем начать кодирование, имея в виду ограничения, с которыми мы столкнемся, прежде чем сможем масштабировать решение.

Вот, наконец, сводная таблица подсказок, на которые я обычно обращаю внимание, чтобы принять решение относительно реализации парсера.

Tips summary to evaluate parsing task difficulty

Заключение

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

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

Как стать писателем на Mlearning.ai

medium.com