Нередко к нам обращаются за разработкой парсеров.
Что такое парсер Парсер — это программа, которая собирает с сайтов информацию по заданным параметрам. Это могут быть название и стоимость товара или контакты ответственных лиц. С помощью парсера собирают контент для своего ресурса, например агрегатора новостей, или информацию о товарах с сайта поставщика. Но чаще всего парсеры заказывают для анализа цен конкурентов с целью сформировать собственное, более выгодное для покупателей предложение.
Сам по себе сбор информации с сайтов не является технически сложной задачей или уголовно наказуемым — информация, размещенная в публичном доступе, обычно не охраняется, кроме отдельных случаев, регулируемых авторским правом. Но, если владельцы сайта-донора не хотят делиться контентом с конкурентами, они прилагают серьезные усилия для защиты своей информации. И тогда задача создания парсера многократно усложняется.
Что нужно было сделать Наш заказчик — владелец онлайн-аптеки — хотел получить информацию о ценах сайта-конкурента.
Парсер должен был иметь следующие функции:
- • возможность запуска по расписанию;
- • защиту от одновременного запуска нескольких процессов парсинга;
- • обход защиты сайта-донора;
- • возможность использовать прокси для обхода блокировки IP-адреса, с которого отправляются запросы;
- • сбор информации по определенным категориям товаров с возможностью изменения списка категорий;
- • сохранение результата работы парсера в txt-файл.
Ход работ В первую очередь были проведены работы по поиску оптимального решения для сбора информации с наименьшим количеством запросов, так как чем меньше запросов — тем меньше вероятность получить блокировку. Был найден подход, который сочетал в себе как обычный парсинг страниц через браузер, так и прямые запросы к API, который был обнаружен, в ходе изучения структуры сайта-донора.
Путем определенных манипуляций была достигнута возможность отправлять запросы к этому API. Далее уже по полученным из API данным собиралась информация по заданных критериям. Это позволило получить более быстрое и надежное решение, чем обычный парсер страниц.
В разработанном решении обычный парсер отрабатывает при старте. Собирает информацию, получает заголовки для авторизации, запускает первый запрос к API и дальше опрашивает только API.
Для обеспечения работы парсера без обнаружения были использованы следующие библиотеки: selenium-wire и undetected-chromedriver .
Для более легкой сборки проекта и его запуска было решено использовать контейнеризацию Docker. Подход обеспечил возможность первоначального запуска проекта с использованием буквально двух команд без необходимости переживать об установке всех зависимых пакетов. Для этих целей мы использовали Docker image ultrafunk/undetected-chromedriver, который позволяет запускать браузер Chrome внутри виртуального контейнера без необходимости подключения внешнего экрана, что при запуске парсера на сервере является важной составляющей.
Кроме того, для лучшей наглядности процесса и оптимизации работы парсера использовался подход по логированию всех важных действий парсера с указанием описания процессов, происходящих во время парсинга.
Результирующий файл содержит список городов, магазинов, ID товара, название товара и другую требуемую информацию.