Парсинг eCommerce: какой виртуальный браузер обходит антибот-защиту

Автор admin

Пока в 2020 оффлайн-мир терпел убытки, рынок eCommerce стремительно развивался. Актуальна  потребность парсить   маркетплейсы с защитой Cloudflare и без нее.  Амазон не обращается к  сервисам Cloudflare.

Простой способ парсить Amazon

Сегодня получение данных с Амазон - рядовая задача. На странице продукта легко извлечь html с помощью curl. 

CURL (“Client URL”) — это модуль для PHP, поддерживающий библиотеку libcurl. Библиотека дает возможность создать запросы к веб-серверу и  извлечь содержимое сайта. Модуль позволяет работать через прокси-серверы, оперировать cookies и проводить аутентификацию пользователей.

 

cURL request

CURL осуществляет http запрос аналогично браузеру. Это отличный инструмент для моделирования действий пользователя и передачи данных.

Крупные маркетплейсы (walmart.com, cdiscount.com), в отличие от Amazon, для защиты от парсинга прибегают к сервисам Cloudflare. В общем случае, чтобы получить содержимое страницы, одного http запроса будет  недостаточно, нужно рендерить страницу (загрузить html, картинки, css и выполнить js). Используя CURL, ренденрить контент невозможно.

 

Как парсить маркетплейсы c защитой Cloudflare

На первом этапе система  блокирует большую часть прокси трафика.  Если прокси не заблокировано, то  включается фильтрация на основе Js.

 

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

 

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

 

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

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

Важную роль играет выбор виртуального браузера.

Виртуальный браузер позволяет открыть страницу сайта без обращения к реальному  браузеру. Прежде чем получить содержимое  страницы (данные), необходимо выполнить ряд действий на странице. С помощью ВБ  можно программировать реакции и поведение  пользователя. Для парсинга лучше всего эмулировать tablet или mobile, так как в этом случае не нужно воспроизводить движения мыши.

Какой бы инструмент вы не выбрали, вам нужно управлять им через драйвер. Виртуальные браузеры  предлагают средства создания  сценариев на различных языках — Python, Java, C#, JavaScript, Ruby.

Неочевидные проблемы с Selenium

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

Selenium WebDriver

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

Кроме того, Селениум не проходит бот-тест: (WebDriver present failed). Проверка на бота сразу показывает применение  виртуального браузера.

bot test of Selenium failed

Google reCAPTCHA применяет анализ рисков и изменяющиеся задачи для защиты от ботов. Пройти  капчу на Selenium невозможно.

Виртуальный браузер, который успешно проходит антибот-тест

Puppeteer - инструмент (библиотека Node.js) для выполнения стандартных  действий в браузере Chromium или Chrome программно, через JavaScript, с помощью удобного API. Он также позволяет создать парсер, имитирующий присутствие  пользователя.

Библиотека Puppeteer не обладает кросс-браузерностью. Но Puppeteer, в отличие от Selenium, легко проходит антибот-проверку.

Puppeteer bot test success

Puppeteer может работать как в headless  режиме, так и в окне реального браузера. Под Puppeteer  сделано несколько плагинов, которые позволяют работать с ним через Node.js, Python, TypeScript, Java.

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