Айфономания под контролем: как мы создали бота для отслеживания самых выгодных цен на iPhone 16
Через несколько месяцев после выхода цена на новый iPhone всегда снижается. На старте всегда найдутся те, кто захочет купить новую модель раньше других, даже если придется переплатить 30-40% сверху. Остальные ждут подходящего момента, когда цены скорректируются.
Если мы посмотрим на iPhone 15 , то, по данным "Известия", через месяц после появления его цены снизились на 15–28%.

Недавно вышел iPhone 16, и я подумывал о его покупке. Но я не хотел постоянно мониторить, когда цена на него снизится. Тогда появилась идея сделать простого телеграм бота, который будет самостоятельно собирать актуальные цены на iPhone 16, и, как только цены снизятся, отправлять уведомление. Фух…
Поначалу задача казалась очень легкой. Надо просто написать парсеры основных ретейлеров и затем прикрутить функцию, которая будет отслеживать изменение цены.
Сразу объясню, почему я не добавил в список для парсинга маркетплейсы и нишевые интернет-магазины. Существует немало историй, когда вместо нормального айфона людям, который заказали айфон на маркетплейсе, приезжает подделка, из-за этого им приходится проходит долгий процесс возврата. Я не хочу рисковать. А нишевыми интернет-магазинами я просто ни разу не пользовался.

Однако я не исключаю, что в будущем в бота будут интегрированы и другие магазины. Людям свойственно менятся, но пока выбор ограничился только крупными ретейлерами. Вернемся к нашим баранам…
Парсить цены айфонов я захотел через отправку запросов к API магазинов. После непродолжительного поиска нужных ссылок в консоли, все они были собраны. И тут меня ждало первое препятствие. При отправке запросов я просто получал 403 error или просьбу включить JS. Повозившись с настройкой headers и так и не достигнув результата, было решено использовать тяжелую артиллерию, и я запустил установку Selenium.
Принцип работы парсера очень простой: с помощью Selenium мы отправляем GET-запрос к карточке товара, а затем достаем цену из нужного элемента. Но тут меня подстерегало второе препятствие. Часть магазинов по-прежнему выдавала 403 error. До этого я ни разу не сталкивался с системами защиты, поэтому пришлось гуглить причины, почему мои запросы через Selenium блокируются.
Оказалось, что сайт может видеть, что бразуер запущен автоматически, а не пользователем (максимально упрощенное объяснение). Для решения такой проблемы замечательными ребятами (и спасителями моих нервных клеток) был создан undetected chromedriver.
Через 40 минут все парсеры были переписаны и протестированы. Начался финальный этап: раскатка парсера на сервере. Чтобы раскатить Selenium парсер на сервере, у которого нет графического интерфейса, необходимо в драйвер добавить опцию “—headless”. Какого же было мое удивление, когда после добавления этой опции все парсеры опять перестали работать.
Посовещавшись с железным коллегой (Chat GPT), было решено попробовать указать кастомного user-agent. И, о чудо, наконец-то все заработало (Sama, с меня шоколадка).
В итоге, на свет появился телеграм-бот, который постоянно мониторит, у каких ретейлеров iPhone 16 стоит дешевле. а также отправляет уведомление, когда минимальная цена снизилась. Несколько моих друзей уже пользуются ботом, и я предлагаю вам тоже его протестировать - @altmetrics_price_bot.
Надеюсь, бот поможет кому-нибудь сэкономить несколько тысяч рублей.
Буду признателен за предложения по улучшению бота. Также пишите, какие магазины еще начать парсить. Самые популярные варианты постараюсь добавить в бота за неделю.
P.S.
Большое спасибо Соне и Володе за помощь в создании бота. Без их участия он был бы корявым и некрасивым

P.P.S.
Возможно первоначальный вариант с отправкой запросов к API не работал из-за cookie. Но это не точно.