Слогер Создать блог
Разработка

Почему скрейпер Instagram ломается каждые 48 часов (и как это исправить)

Скрейперы ломаются из-за архитектурной ошибки: удалённый источник проектируют как локальную базу. Разбираем четыре типа отказов и пайплайн, который переживёт любые изменения Instagram.

Каждый, кому нужны данные из Instagram, писал такой скрипт: curl, регулярка, чтобы вытащить JSON из HTML, json_decode, готово. Во вторник после обеда работает. В четверг — пустой массив. Добавляешь User-Agent — работает неделю. Потом выскакивает стена логина. Добавляешь прокси. А затем ключ edge_owner_to_timeline_media переименовывается во что-то другое, и foreach валится на null.

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

Четыре типа отказов

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

Тип отказаПроявлениеПравильная реакция
ТранзиентныйТаймаут, 502, сброс соединенияРетрай с экспоненциальным бэкоффом
Rate/блок429 или 200 с пустым теломСильный бэкофф или другой маршрут
Изменение схемы200, валидный JSON, но нужное поле переместилось или исчезлоРетрай бесполезен. Нужна валидация контракта и сигнал тревоги
Семантическое отсутствиеАккаунт закрыт, удален или ноль постовКорректный постоянный пустой ответ, без ретраев

Первый тип — единственный, который стоит повторять. Остальные три — разные болезни, и лечить их одинаково нельзя. Особенно коварен третий: он не бросает исключение, а молча пишет null в базу. Три недели никто не замечает.

Архитектура: три стадии

Пайплайн выглядит просто: планировщик, воркеры загрузки, нормализатор, хранилище. Но главное — три правила, которые держат эту конструкцию на плаву.

  • Fetch-стадия никогда не пишет в доменные таблицы. Только сырые ответы. Нормализация — отдельный, воспроизводимый шаг.
  • Планировщик владеет бюджетом. Будь то кредиты API, трафик прокси или ваша готовность получать баны, один компонент решает, сколько потратить. Не воркеры. Иначе они сожрут всё за девяносто секунд.
  • Нормализатор владеет контрактом. Он проверяет ответ на соответствие ожидаемой форме и громко падает при расхождении. Это будильник на случай изменения схемы.

Первое правило пропускают чаще всего. Хранение сырого ответа стоит несколько килобайт, зато если через полгода вы поймёте, что неправильно считали вовлечённость, вы перепарсите историю без единого нового запроса и без единого потраченного кредита.

Стадия 1: воркер загрузки

В воркере три проверки. Есть ли бюджет — если нет, возвращаем «deferred». Статус ответа: 404 значит «аккаунт не существует», ретраить бессмысленно. 429 или 503 — нас притормозили, возвращаем кредит в бюджет и спим долго, с джиттером. 200 — возвращаем сырое тело, без разбора. Парсинг — это забота нормализатора.

Джиттер — не блажь. Если двадцать воркеров упали одновременно и будут ретраить одновременно, они снова упадут вместе. Случайная задержка разводит их по времени.

Типичные ошибки

Обрабатывать только транзиентные сбои. Таймаут повторить можно, но что делать с блоком, изменением схемы или отсутствием аккаунта? Если всё это падает в общий catch и помечается как «ошибка», пайплайн тихо деградирует и пишет мусор.

Не сохранять сырые ответы. Если вы сразу пишете распарсенные данные, то при изменении логики парсинга придётся перезапрашивать всё снаружи, платить снова и рисковать баном.

Позволять воркерам самим решать, сколько запросов делать. Это верный способ сжечь бюджет за минуту. Бюджет должен быть один, и он должен быть в планировщике.

Скрейпер ломается не потому, что Instagram коварен. Он ломается потому, что вы проектируете его как локальный вызов. Четыре типа отказов нельзя обрабатывать одним способом. Разделите пайплайн, храните сырые ответы, централизуйте бюджет. И тогда он будет работать не 48 часов, а месяцами.

По материалам: startup. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

Личный опыт

Имплант, мост или съёмный протез: чем отличаются и как выбрать

Три способа заменить зуб решают одну задачу по-разному, и разница проявляется через годы, а не в день оплаты. Разбираем, что подойдёт именно в вашем случае и о чём спрашивать врача заранее.

Слогер 05.10.2026 ▲ 0
Разработка

Как японские принципы управления делают код чище и экономнее

5S, канбан, дзидока и ваби-саби родились на производстве, но отлично объясняют, почему один софт летает на слабом железе, а другой тормозит на ровном месте. Разбираем, как эти практики выглядят в репозитории и в голове разработчика.

Слогер 05.10.2026 ▲ 0
Образование

Как закончить бесплатный курс Microsoft по AI: разбор плана обучения и бейджа

Microsoft Learn собрал бесплатный самостоятельный трек по искусственному интеллекту — с модулями, проверками знаний и цифровым бейджем на финише. Разбираем, что внутри и как не бросить на середине.

Слогер 05.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Разработка

Как переписать личное портфолио с Angular 12 на Angular 22: разбор прыжка через десять версий

Личный сайт на Angular 12, продакшен на Angular 19 — и решение переписать всё сразу на 22. Что даёт чистая переписка вместо цепочки миграций, и почему инфраструктура и SVG-математика важнее списка логотипов в резюме.

Слогер 04.10.2026 ▲ 0
Карьера

Как выбрать тренажёр для mock-интервью: разбор AI-сервисов, живых интервьюеров и банков задач с ценами

Собеседование проверяет не только код, но и умение объяснять. Разбираем, какие сервисы для репетиции интервью стоят своих денег, а какие путают с тренажёрами.

Слогер 04.10.2026 ▲ 0
Разработка

Как отвечать на вопросы по Git на собеседовании: разбор механизмов вместо заученных команд

Git спрашивают почти на каждом техническом интервью, но проверяют не флаги, а модель репозитория в твоей голове. Разбираем частые вопросы и то, что за ними стоит.

Слогер 04.10.2026 ▲ 0
Карьера

Как составить резюме, которое пройдёт ATS: разбор для студентов-инженеров

Автоматические системы отсеивают резюме до того, как их увидит рекрутер. Разбираем, как описать дипломный проект, какие разделы поставить вперёд и какие ошибки в вёрстке убивают документ.

Слогер 04.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Как подавать заявки на вакансии, не заполняя формы вручную: разбор в три шага

Расширение для браузера заполняет однотипные формы откликов за вас и через 15 минут присылает отчёт. Разбираем, как это устроено, где границы метода и какие настройки экономят нервы.

Слогер 03.10.2026 ▲ 0
Карьера

5 навыков разработчика, без которых технические знания простаивают

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

Слогер 03.10.2026 ▲ 0
Карьера

Как автоматизировать отклики на вакансии: разбор расширения, которое отправляет заявки за вас

Джуниор-разработчик написал бесплатное расширение для браузера, которое фильтрует вакансии и само заполняет формы — за неделю оно принесло ему пять собеседований. Разбираю логику работы, чек-лист безопасности и ошибки, из-за которых массовые отклики вредят.

Слогер 03.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Разработка

Чем опенсорс-команда отличается от работодателя: опыт участника проекта Pyxel из ESA

Инженер пришёл в открытый проект ESA с одним коммитом и получил там то, чего не дал ни один наниматель: подробную обратную связь, включённость и спасибо за каждый шаг. Разбираем, что именно сработало — и как повторить это у себя.

Слогер 02.10.2026 ▲ 0