image image image image
Исходные данные: сайт https://goldapple.ru/. Необходимо получить остатки товаров в определенном регионе, разбитые по магазинам и сохранить в Excel. Как выглядит в браузере? Довольно медленный сайт, карточки товаров с зацикленным видео, карточки выводятся по 20 штук, при скроллинге вниз подгружаются новые товары. Чтобы узнать наличие, нужно кликнуть по карточке, дождаться загрузки и нажать на кнопку "Наличие", после чего открывается всплывающее окно со списком магазинов. Что "под капотом"? Сайт - просто кошмар для парсера: всё содержимое динамическое, подгружается небыстро, периодически вылетает с ошибкой тайм-аута, с анонимным VPN не пускает, на страницах десятки скриптов, есть внутренний JS - API, но с защитой и авторизацией, которую не удалось победить, сохраняет кучу данных и в кукисы, и local storage... Пришлось реализовывать через имитацию браузера, в данном случае - библиотеку Nodriver. Страницы получаем через nodriver, а карточки товаров и нужные поля парсим через bs4, так как он делает это быстрее, чем nodriver. Клик по кнопке "Наличие", к сожалению не работает в headless режиме, поэтому на VPS без графического интерфейса пользоваться не получится. Товаров очень много, загрузка страниц, как писал выше, весьма небыстрая, поэтому добавляем многопоточный режим с возможностью указать прокси. Результаты пишутся в csv-файл после обработки каждого товара, чтобы не потерять данные при обрыве связи или сбоях. Было непросто, но результат достигнут.