Инженер по разработке краулер-движка (Node.js/TypeScript)

Уровень дохода не указан

Опыт работы: 3–6 лет

Полная занятость

График: 5/2

Рабочие часы: 8

Формат работы: удалённо

Напишите телефон, чтобы работодатель мог связаться с вами
Нажимая «Продолжить», вы подтверждаете, что ознакомлены, полностью согласны и принимаете условия «соглашения»
Мы ищем сильного инженера, который поможет нам построить и поддерживать масштабируемый движок для сбора данных — надёжный, предсказуемый и устойчивый к защитным механизмам сайтов. Это не про разовые скрипты: речь о промышленной системе, которая должна работать стабильно месяцами и годами, а при изменениях на целевых порталах — быстро и прозрачно восстанавливаться.

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

Что нужно делать:

  • Разработать ядро краулер-движка на Node.js/TypeScript. Реализовать оркестрацию запусков, загрузку модулей, логику повторных попыток и задержек (retries и backoff), контроль параллелизма и частоты запросов, обработку ошибок, работу с артефактами запусков и логированием.
  • Создать набор подключаемых модулей (управление браузером, маршрутизация для обхода антибот-защиты, извлечение данных, пагинация, вывод результатов) и спроектировать декларативный формат описания источников — схему конфигурации и контракт выходной схемы, отделённые от параметров времени выполнения.
  • Использовать проверенные готовые решения для типовых слоёв (автоматизация браузера, цикл обхода, механизмы скрытности), чтобы сосредоточить внутренние усилия на том, что действительно специфично для наших данных.
  • Выстроить рабочий процесс для разработчиков: добавление источника, локальное тестирование, регистрация, планирование, мониторинг выполнения.
  • Перенести поведение существующих краулеров с JVM без потери покрытия и точности на уровне полей, включая неописанные «костыли» и особенности отдельных порталов.
  • Валидировать каждую миграцию по эталонному выводу, приоритизируя источники по частоте поломок, а не по алфавиту. Документировать особенности каждого портала в процессе переноса.
  • Поддерживать работу действующих краулеров в ходе миграции: классифицировать и устранять сбои, чинить сломанные селекторы, адаптироваться к изменениям навигации, перемещённым порталам и новой логике пагинации. Участвовать в дежурствах по источникам, за которые вы отвечаете.
  • Корректно различать типы сбоев: временные ошибки, изменения DOM, новая антибот-защита, стены авторизации, полное исчезновение портала — и вовремя эскалировать проблемы, которые нельзя решить инженерными методами.
  • Работать с антибот-защитой в рамках закона и правил сервисов: проводить реверс-инжиниринг порталов через анализ сетевого трафика и недокументированных JSON-эндпоинтов, подбирать подходящий инструмент под каждый источник (обычный HTTP, headless-браузер, управляемый stealth-браузер, стратегия прокси, сервис CAPTCHA).
  • Построить ИИ-слой для извлечения данных: реализовать извлечение на базе LLM с приоритетом схемы, с детерминированным фоллбэком на селекторы и циклом самовосстановления (обнаружение, диагностика, исправление, проверка) в жёстких рамках по количеству итераций и бюджету затрат, с контролем через верификацию схемы и сравнение с последним эталонным выводом.
  • Регистрировать источники в платформе планирования и мониторинга, участвовать в нормализации данных перед записью в хранилище (сопоставление имён, дедупликация, идемпотентная запись, восстановление частичных запусков), расширять бэкенд-сервисы на Node.js и внутренний UI для отображения статуса краулеров

Требования к кандидату:

  • От 3 лет опыта в коммерческой разработке ПО.
  • Не менее 1,5 лет разработки и поддержки краулеров/скраперов в продакшене на Node.js — это жёсткое требование: нужны примеры реально запущенных, расписанных по расписанию и поддерживаемых краулеров для сайтов, которые вы не контролируете.
  • Опыт длительной поддержки краулеров в продакшене (не разовые скрипты и не проекты для одного сайта).
  • Уверенное владение Node.js и TypeScript: асинхронные паттерны, контроль параллелизма и частоты запросов, обработка ошибок, повторные попытки и задержки.
  • Практический опыт работы с Playwright и/или Puppeteer в продакшене: понимание компромиссов между headless и headful, работа с контекстами браузера, состоянием хранения, перехватом сетевого трафика.
  • Знание инструментов для краулинга и парсинга в экосистеме Node (Crawlee, Cheerio или аналоги), а также умение выполнять низкоуровневый HTTP-скрапинг, когда браузер не нужен.
  • Опыт работы с бэкенд-сервисами на Node и REST API, знание SQL-баз данных (PostgreSQL или аналог).
  • Умение писать переиспользуемый код в стиле библиотеки: чёткие границы модулей, паттерны плагинов/стратегий, типизированные интерфейсы, версионированная конфигурация. Важно уметь показать пример, где несколько разовых решений были обобщены в единый движок.
  • Практический опыт борьбы с антибот-системами: Cloudflare Bot Management, Imperva, reCAPTCHA v2/v3, Turnstile, лимитирование частоты запросов; понимание браузерного и TLS-фингерпринтинга, стратегий использования прокси, сохранения сессий, платформ управляемых stealth-браузеров. Умение вовремя понять, что решение с CAPTCHA не поможет, потому что проблема в другом.
  • Практическое применение LLM для извлечения данных: структурированный вывод на основе схемы, проектирование промптов, валидация результатов, учёт стоимости токенов, понимание, когда LLM лучше селекторов, а когда — нет, и как защититься от «уверенных, но неверных» ответов.
  • Инженерия качества данных: валидация схемы, тестирование по эталонам/снимкам и сравнение данных с предыдущими запусками, нормализация, нечёткое сопоставление имён, дедупликация, идемпотентная запись.
  • Владение Git, навыки проведения код-ревью, понимание важности покрытия тестами, опыт работы с CI/CD, Docker, деплоем в облаке (предпочтительно AWS). Способность читать код на JVM для точного переноса логики.
  • Рабочий уровень английского языка для ежедневной технической коммуникации с командой заказчика.

Будет плюсом:

  • Опыт миграции скрапинг-системы с одного языка/рантайма на другой без простоя.
  • Опыт настройки краулеров на основе конфигурации или декларативного подхода, где источники — это данные, а не код.
  • Знакомство с фреймворками для агентов или агентскими рабочими процессами (вызов инструментов, многошаговые циклы, участие человека в цикле) — LangGraph, Claude Agent SDK или аналоги; агентская автоматизация браузера (Browser Use, Stagehand); MCP-серверы.
  • Знание управляемых платформ для скрапинга/извлечения данных (Firecrawl, Kadoa, ScrapeGraphAI, Apify) и коммерческих поставщиков данных как альтернативы скрапингу.
  • Опыт извлечения данных из PDF и документов (OCR, извлечение таблиц, структурированный парсинг); опыт скрапинга порталов государственных органов США или публичных реестров.
  • Понимание юридических аспектов скрапинга и границ правил использования сервисов: robots.txt, лимитирование частоты запросов, стены аутентификации, условия распространения данных.
  • Опыт фронтенд-разработки (React) для внутреннего UI операций — приветствуется, но не является заменой требований к краулеру.

Ключевые навыки

  • Node.js
  • React
  • Английский — B2 — Средне-продвинутый

Контакты

Задайте вопрос работодателю

Он получит его с откликом на вакансию

Где предстоит работать

Тбилиси
Вакансия опубликована 27 августа 2026 в Тбилиси