Назад к блогу

Парсинг меню ресторанов и цен доставки еды: обход блокировок агрегаторов без потери данных

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

📅1 июля 2026 г.

Яндекс.Еда, Delivery Club, СберМаркет и десятки региональных агрегаторов доставки — настоящий клондайк данных для маркетологов, аналитиков и владельцев ресторанного бизнеса. Но стоит начать систематически собирать цены и позиции меню, как сервисы начинают блокировать запросы. В этой статье разберём, как правильно организовать парсинг меню и цен доставки, какие инструменты использовать и как прокси помогают избежать блокировок.

Зачем парсить меню ресторанов и цены доставки

Рынок доставки еды в России — один из самых динамичных сегментов e-commerce. Цены на блюда, составы меню и условия доставки меняются буквально каждый день. Вручную отслеживать эти изменения невозможно, если речь идёт о десятках конкурентов или сотнях позиций. Именно здесь и нужен автоматический сбор данных.

Вот кто использует парсинг меню и цен на практике:

  • Владельцы ресторанов и кафе — отслеживают цены конкурентов в своём районе, чтобы оперативно корректировать собственное ценообразование.
  • Маркетологи ресторанных сетей — анализируют, какие позиции меню конкуренты продвигают через акции и спецпредложения.
  • Аналитики рынка HoReCa — строят отчёты по средним ценам на категории блюд в разных городах и регионах.
  • Агрегаторы-стартапы — собирают базу ресторанов с меню и ценами для собственного каталога.
  • Инвесторы и консультанты — оценивают конкурентную среду перед открытием нового заведения или франшизы.
  • Разработчики приложений — формируют базы данных блюд для приложений по подсчёту калорий или планированию питания.

Если вы работаете в ресторанном бизнесе или занимаетесь его аналитикой, регулярный мониторинг цен конкурентов — это не роскошь, а необходимость. Разница в 30–50 рублей на популярном блюде может напрямую влиять на конверсию в заказы. А без автоматизации вы будете всегда на шаг позади тех, кто уже настроил сбор данных.

Какие данные собирают с агрегаторов доставки

Прежде чем настраивать парсер, важно понять, какие именно данные вам нужны. Агрегаторы доставки содержат несколько слоёв информации, и каждый из них полезен для разных задач.

Тип данных Что включает Для кого полезно
Меню и позиции Названия блюд, описания, состав, вес, КБЖУ Разработчики приложений, диетологи
Цены блюд Текущая цена, цена со скидкой, история изменений Владельцы ресторанов, маркетологи
Условия доставки Стоимость доставки, минимальная сумма заказа, время доставки Аналитики, стартапы
Акции и спецпредложения Скидки, комбо, промо-блюда, сезонные предложения Маркетологи, конкурентная разведка
Рейтинги и отзывы Оценки заведений, количество отзывов, теги качества Инвесторы, консультанты
Геоданные Адреса, зоны доставки, районы присутствия Аналитики рынка, франшизы

Особую ценность представляет мониторинг цен в динамике: если собирать данные раз в сутки на протяжении нескольких месяцев, можно увидеть паттерны ценообразования конкурентов — когда они поднимают цены, когда запускают акции и как реагируют на внешние события (праздники, спортивные мероприятия, плохая погода).

Особенности защиты Яндекс.Еды, Delivery Club и других агрегаторов

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

Яндекс.Еда

Использует несколько уровней защиты одновременно. Во-первых, активно применяется геопривязка: контент меню и цены отображаются в зависимости от вашего IP-адреса — если IP из Москвы, вы видите московские рестораны. Во-вторых, сайт работает как SPA (Single Page Application) на React, то есть данные подгружаются через API-запросы, а не зашиты в HTML. В-третьих, при подозрительной активности включается Яндекс SmartCaptcha. При частых запросах с одного IP вас просто перестают пускать на сайт.

Delivery Club (СберМаркет)

Схожая архитектура: данные отдаются через внутренний API, а не через статический HTML. Сервис анализирует поведенческие паттерны: если запросы идут слишком быстро или без пауз — блокировка. Также используется анализ User-Agent и заголовков запросов. Нестандартные заголовки сразу вызывают подозрение.

Региональные агрегаторы

Такие сервисы, как Chibbis, Goloso, локальные агрегаторы в регионах, как правило, имеют более слабую защиту. Часть из них использует простые HTML-страницы, которые парсятся стандартными инструментами. Однако и здесь блокировка по IP при частых запросах — стандартная практика.

Главные механизмы блокировки парсеров на агрегаторах доставки:

  • Блокировка IP при превышении лимита запросов (rate limiting)
  • Геоблокировка — показ разного контента для разных IP
  • Анализ User-Agent и HTTP-заголовков
  • Капча при подозрительной активности
  • JavaScript-рендеринг данных (SPA-архитектура)
  • Анализ поведения: скорость кликов, прокрутка, паузы

Инструменты для парсинга без кода и с кодом

Хорошая новость: для парсинга меню ресторанов не обязательно уметь программировать. Существуют готовые no-code решения, которые справляются с большинством задач. Но для работы с SPA-сайтами вроде Яндекс.Еды понадобятся более серьёзные инструменты.

No-code инструменты (без программирования)

Octoparse — один из самых популярных визуальных парсеров. Позволяет кликать по элементам страницы и строить сценарий сбора данных без написания кода. Есть облачный режим с ротацией IP. Подходит для сбора меню с сайтов с простой структурой.

ParseHub — аналогичный инструмент с визуальным интерфейсом. Умеет работать с JavaScript-страницами, что делает его применимым для современных агрегаторов. Есть поддержка прокси.

Apify — платформа с готовыми «акторами» (готовыми парсерами для популярных сайтов). Для некоторых агрегаторов доставки уже есть готовые решения в их маркетплейсе. Можно запускать через веб-интерфейс без кода.

Инструменты с кодом (для разработчиков)

Python + Requests + BeautifulSoup — классическая связка для парсинга статических страниц. Быстро, легко, но не справляется с JavaScript-рендерингом.

Python + Selenium или Playwright — управляет реальным браузером (Chrome/Firefox), поэтому справляется с SPA-сайтами, JavaScript и даже некоторыми капчами. Playwright считается более современным и быстрым решением. Именно эта связка работает с Яндекс.Едой и Delivery Club.

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

Инструмент Нужен код? JS-рендеринг Прокси Подходит для
Octoparse Нет Частично Встроенная ротация Региональные агрегаторы
ParseHub Нет Да Внешние прокси Большинство агрегаторов
Apify Нет Да Встроенная + внешние Яндекс.Еда, Delivery Club
Selenium/Playwright Да (Python) Да Внешние прокси Любые сайты
Scrapy Да (Python) Через плагины Внешние прокси Масштабный сбор данных

Почему без прокси парсинг не работает

Это ключевой вопрос. Многие начинающие аналитики пробуют запустить парсер напрямую со своего IP и сразу сталкиваются с блокировкой. Причина проста: агрегаторы доставки видят сотни запросов с одного адреса за короткое время и автоматически блокируют его. Восстановление доступа может занять от нескольких часов до нескольких дней.

Прокси решают эту проблему, распределяя запросы между множеством разных IP-адресов. С точки зрения сервера, запросы выглядят как обычный трафик от разных пользователей из разных мест. Но не все прокси одинаково эффективны для этой задачи.

Резидентные прокси

Резидентные прокси используют IP-адреса реальных домашних пользователей. С точки зрения Яндекс.Еды или Delivery Club — это обычный человек, который зашёл посмотреть меню ресторана. Такие прокси практически не блокируются при правильном использовании. Идеальный выбор для сбора данных с крупных агрегаторов с серьёзной защитой.

Мобильные прокси

Мобильные прокси — IP-адреса мобильных операторов (МТС, Билайн, МегаФон и т.д.). Их особенность в том, что один мобильный IP может использоваться тысячами реальных пользователей одновременно (через NAT), поэтому сайты крайне редко блокируют мобильные адреса. Это делает их одним из самых надёжных вариантов для парсинга с высокой частотой запросов.

Прокси дата-центров

Прокси дата-центров — самые быстрые и дешёвые, но их IP легко определяются как «не человеческие». Для региональных агрегаторов с простой защитой они подойдут, но Яндекс.Еда и Delivery Club их блокируют достаточно быстро. Тем не менее прокси дата-центров хорошо работают для первичного обхода структуры сайта и тестирования парсера перед боевым запуском.

Какой тип прокси выбрать для парсинга меню:

  • Яндекс.Еда, Delivery Club → резидентные или мобильные прокси
  • Региональные агрегаторы (Chibbis и т.д.) → прокси дата-центров или резидентные
  • Сбор данных по всей России (разные города) → резидентные с геотаргетингом по городам
  • Высокочастотный мониторинг (каждый час) → мобильные прокси с ротацией

Пошаговая настройка парсера с прокси

Разберём практический сценарий: вы хотите ежедневно собирать цены на пиццу у 20 конкурентов в вашем городе с Яндекс.Еды. Вот как это настроить шаг за шагом.

Шаг 1. Изучите структуру API агрегатора

Откройте Яндекс.Еду в браузере, нажмите F12 (DevTools), перейдите на вкладку Network и отфильтруйте запросы по XHR/Fetch. Найдите страницу ресторана и посмотрите, какие API-запросы отправляются при загрузке меню. Обычно это что-то вроде api/v1/menu?restaurantId=.... Зафиксируйте заголовки этих запросов — они понадобятся для имитации.

Шаг 2. Выберите инструмент

Если вы не пишете код — используйте Apify или ParseHub. Если пишете на Python — Playwright будет оптимальным выбором для работы с JavaScript-сайтами. Установите нужный инструмент и убедитесь, что он поддерживает подключение внешних прокси.

Шаг 3. Получите прокси с геотаргетингом

Это важный момент. Яндекс.Еда показывает разные рестораны в зависимости от города. Если вы парсите меню ресторанов Екатеринбурга — вам нужны прокси с IP из Екатеринбурга. Резидентные прокси с геотаргетингом по городу позволяют получать именно тот контент, который видит местный пользователь. Укажите нужный регион при настройке прокси.

Шаг 4. Настройте ротацию прокси

Не используйте один прокси для всех запросов. Настройте ротацию: каждые 5–10 запросов меняйте IP. В Apify это делается через настройки прокси-пула. В Scrapy — через middleware. В Playwright — через передачу нового прокси при каждом создании контекста браузера. Чем чаще меняется IP, тем ниже риск блокировки.

Шаг 5. Настройте задержки между запросами

Добавьте случайные паузы между запросами — от 2 до 8 секунд. Это имитирует поведение реального пользователя. Никогда не делайте запросы с интервалом менее 1 секунды — это верный путь к бану. В Scrapy используйте параметр DOWNLOAD_DELAY и включите AUTOTHROTTLE_ENABLED.

Шаг 6. Настройте правильные заголовки запросов

Всегда передавайте реалистичный User-Agent (строку браузера), заголовок Accept-Language (например, ru-RU,ru;q=0.9) и Referer. Запросы без этих заголовков выглядят как бот и блокируются в первую очередь. Используйте актуальные User-Agent строки от Chrome или Firefox.

Шаг 7. Настройте расписание и хранение данных

Запускайте парсер в ночное время (с 2:00 до 6:00) — нагрузка на серверы агрегаторов минимальная, а подозрительный трафик менее заметен. Сохраняйте данные в базу данных (PostgreSQL, MySQL) или хотя бы в CSV с временными метками. Это позволит строить историю изменения цен.

# Пример настройки прокси в Playwright (Python)
from playwright.sync_api import sync_playwright
import random
import time

proxies = [
    {"server": "http://proxy1.example.com:8080", "username": "user", "password": "pass"},
    {"server": "http://proxy2.example.com:8080", "username": "user", "password": "pass"},
    # ... больше прокси
]

def parse_restaurant_menu(url):
    proxy = random.choice(proxies)
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        context = browser.new_context(
            proxy=proxy,
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        )
        page = context.new_page()
        
        # Случайная задержка 2-8 секунд
        time.sleep(random.uniform(2, 8))
        
        page.goto(url)
        page.wait_for_selector('.menu-item')  # ждём загрузки меню
        
        # Сбор данных о блюдах
        items = page.query_selector_all('.menu-item')
        menu_data = []
        for item in items:
            name = item.query_selector('.item-name').inner_text()
            price = item.query_selector('.item-price').inner_text()
            menu_data.append({'name': name, 'price': price})
        
        browser.close()
        return menu_data

Типичные ошибки и как их избежать

Даже при правильной настройке инструментов многие сталкиваются с проблемами при парсинге данных о доставке еды. Вот самые распространённые ошибки и способы их устранения.

Ошибка 1: Использование одного прокси для всех запросов

Даже самый качественный резидентный прокси будет заблокирован, если через него идут сотни запросов в день к одному сайту. Всегда используйте пул из минимум 10–20 прокси с ротацией. Чем больше ресторанов вы парсите, тем больше нужно прокси.

Ошибка 2: Игнорирование геотаргетинга

Яндекс.Еда и Delivery Club показывают разный контент в зависимости от города пользователя. Если вы хотите собрать данные по ресторанам Новосибирска, но используете московские прокси — вы получите московские данные. Всегда проверяйте, что прокси соответствует нужному региону.

Ошибка 3: Парсинг HTML вместо API

Начинающие парсеры пытаются собирать данные из HTML-кода страниц. Но на SPA-сайтах (а Яндекс.Еда именно такая) данные в HTML не зашиты — они загружаются через API. Куда эффективнее найти нужный API-эндпоинт через DevTools и обращаться напрямую к нему. Это быстрее, стабильнее и требует меньше ресурсов.

Ошибка 4: Слишком высокая частота запросов

Желание собрать данные побыстрее понятно, но оно ведёт к мгновенной блокировке. Для ежедневного мониторинга цен у 50 ресторанов достаточно запускать парсер раз в сутки с паузами 3–5 секунд между запросами. Не пытайтесь ускорить процесс за счёт уменьшения задержек.

Ошибка 5: Отсутствие мониторинга работоспособности прокси

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

Ошибка 6: Игнорирование изменений структуры сайта

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

Чек-лист перед запуском парсера меню ресторанов:

  • ✅ Настроен пул из 10+ прокси с ротацией
  • ✅ Прокси соответствуют нужному городу/региону
  • ✅ Задержки между запросами 3–8 секунд (случайные)
  • ✅ Установлен реалистичный User-Agent
  • ✅ Добавлены заголовки Accept-Language и Referer
  • ✅ Настроено хранение данных с временными метками
  • ✅ Включён мониторинг ошибок и уведомления
  • ✅ Запуск запланирован на ночное время

Заключение

Парсинг меню ресторанов и цен доставки — это реальный инструмент конкурентного преимущества в ресторанном бизнесе и аналитике рынка HoReCa. Яндекс.Еда, Delivery Club и другие агрегаторы активно защищают свои данные, но при правильном подходе — грамотном выборе инструментов, настройке задержек и использовании качественных прокси — сбор данных работает стабильно и без блокировок.

Ключевые выводы из этой статьи: используйте инструменты с поддержкой JavaScript-рендеринга (Playwright, Apify), настраивайте ротацию прокси, не забывайте про геотаргетинг и всегда добавляйте случайные паузы между запросами. Это три кита стабильного парсинга.

Если вы планируете регулярно собирать данные с Яндекс.Еды, Delivery Club или региональных агрегаторов доставки, рекомендуем обратить внимание на резидентные прокси — они обеспечивают максимальную устойчивость к блокировкам и поддерживают геотаргетинг по российским городам, что критически важно для корректного сбора данных о ценах в конкретных регионах.