Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
R50 2c89dd09080649d376f0e7026694117b
PHP, IOS, Android, C#, Python

Разработка парсера аптеки

Добавлено 06 сен 2023 в 13:53
Нередко к нам об­ра­ща­ют­ся за раз­ра­бот­кой парсеров.

Что такое парсер Парсер — это прог­рамма, которая собирает с сайтов ин­форма­цию по заданным па­рамет­рам. Это могут быть название и сто­имость товара или контакты от­ветс­твен­ных лиц. С помощью парсера собирают контент для своего ресурса, например аг­ре­гато­ра новостей, или ин­форма­цию о товарах с сайта пос­тавщи­ка. Но чаще всего парсеры за­казы­ва­ют для анализа цен кон­ку­рен­тов с целью сфор­ми­ровать собс­твен­ное, более выгодное для по­купа­телей пред­ло­жение.

Сам по себе сбор ин­форма­ции с сайтов не является тех­ни­чес­ки сложной задачей или уголовно на­казу­емым — ин­форма­ция, раз­ме­щен­ная в пуб­личном доступе, обычно не ох­ра­ня­ет­ся, кроме от­дель­ных случаев, ре­гули­ру­емых ав­тор­ским правом. Но, если вла­дель­цы сайта-донора не хотят делиться кон­тентом с кон­ку­рен­та­ми, они при­лага­ют серь­ез­ные усилия для защиты своей ин­форма­ции. И тогда задача создания парсера мно­гок­ратно ус­ложня­ет­ся.

Что нужно было сделать Наш заказчик — владелец онлайн-аптеки — хотел получить ин­форма­цию о ценах сайта-кон­ку­рен­та.

Парсер должен был иметь сле­ду­ющие функции:

  • • воз­можность запуска по рас­пи­санию;
  • • защиту от од­новре­мен­но­го запуска нес­коль­ких про­цес­сов парсинга;
  • • обход защиты сайта-донора;
  • • воз­можность ис­поль­зо­вать прокси для обхода бло­киров­ки IP-адреса, с которого от­прав­ля­ют­ся запросы;
  • • сбор ин­форма­ции по оп­ре­делен­ным ка­тего­ри­ям товаров с воз­можностью из­ме­нения списка ка­тего­рий;
  • • сох­ра­нение ре­зуль­та­та работы парсера в txt-файл.
Ход работ В первую очередь были про­веде­ны работы по поиску оп­ти­маль­но­го решения для сбора ин­форма­ции с на­имень­шим ко­личес­твом запросов, так как чем меньше запросов — тем меньше ве­ро­ят­ность получить бло­киров­ку. Был найден подход, который сочетал в себе как обычный парсинг страниц через браузер, так и прямые запросы к API, который был об­на­ружен, в ходе изучения струк­ту­ры сайта-донора.

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

В раз­ра­ботан­ном решении обычный парсер от­ра­баты­ва­ет при старте. Собирает ин­форма­цию, получает за­голов­ки для ав­то­риза­ции, за­пус­ка­ет первый запрос к API и дальше оп­ра­шива­ет только API.

Для обес­пе­чения работы парсера без об­на­ружения были ис­поль­зо­ваны сле­ду­ющие биб­ли­оте­ки: selenium-wire и undetected-chromedriver .

Для более легкой сборки проекта и его запуска было решено ис­поль­зо­вать кон­тей­не­риза­цию Docker. Подход обес­пе­чил воз­можность пер­во­началь­но­го запуска проекта с ис­поль­зо­вани­ем бук­валь­но двух команд без не­об­хо­димос­ти пе­режи­вать об ус­та­нов­ке всех за­виси­мых пакетов. Для этих целей мы ис­поль­зо­вали Docker image ultrafunk/undetected-chromedriver, который поз­во­ля­ет за­пус­кать браузер Chrome внутри вир­ту­аль­но­го кон­тей­не­ра без не­об­хо­димос­ти под­клю­чения внешнего экрана, что при запуске парсера на сервере является важной сос­тавля­ющей.

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

Резуль­ти­ру­ющий файл содержит список городов, ма­гази­нов, ID товара, название товара и другую тре­бу­емую ин­форма­цию.

Eb12af05b8