scraper.mindq.ru

← все платформы

Wolt

URL шаблон: https://wolt.com/{lang}/{country}/{city}/restaurant/{slug}

Источник данных: Playwright (DOM) + Wolt consumer-api (HTTP JSON)

Стратегия парсинга

  1. Открываем страницу в Playwright (Chromium с прокси), нормализуем URL к английской локали (`/en/`).
  2. Ждём появления селектора `[data-test-id="MenuSection"]`.
  3. Гоняем JS-extractor через `page.evaluate(...)` — собираем DOM-поля: имя, телефон, адрес, теги, часы, меню.
  4. Параллельно дёргаем `https://consumer-api.wolt.com/order-xp/web/v1/venue/slug/{slug}/dynamic/` — это даёт более полные данные о статусе/доставке/часах.
  5. Объединяем DOM + API. API имеет приоритет для часов, рейтинга, мин. заказа и расписания.

Поля ресторана

полеоткуда / какпример
nameh1 на странице → DOM'Café Milano | Ristorante & Pizzeria'
slugиз URL'caf-milano-ristorante-pizzeria'
urlнормализованный URL (en-локаль)'https://wolt.com/en/...'
ratingAPI: venue.header.delivery_method_statuses[].metadata4.5
is_openAPI: venue.open_status.is_opentrue
open_statusAPI: venue.open_status.value'OPEN_NOW'
next_open / next_closeAPI: venue.open_status'2026-05-04T11:00:00Z'
min_order_eurAPI: order_minimum / metadata10.0
delivery_estimate_min/max/labelAPI: venue.delivery_configs[homedelivery].estimate20-30 min
phoneDOM: a[href^="tel:"]'+49241...'
addressDOM: блок Address (h3 + p) → массив строк['Jülicher Str. 69','52070 Aachen']
coordinatesпарсинг maps_url (q=lat,lng){lat:50.78, lng:6.10}
maps_urlDOM: a[href*="maps.google"]'https://maps.google.com/?q=...'
delivery_hoursAPI delivery_specs (если есть) или DOM table{monday:'11:00-23:00',...}
tagsDOM: блок "See similar venues" → ссылки['Burger','Snacks & drinks']
descriptionDOM footer p (>20 символов)null или текст
dealsAPI venue_raw.discounts[].description.title['10% off']

Поля меню (для каждого блюда)

полеоткуда / какпример
categoryDOM: [data-test-id="MenuSectionTitle"] h2'SALATE 🥗'
noteDOM: <p> сразу после заголовка категорииnull
nameitem-card-header span'242. New York Steak Salad'
descriptionitem-card-header → следующий <p>null или текст
priceitem-card-price → текст'€11.90'
old_priceitem-card-price → <del>null или '€14.90'
unit_priceиз item-card-price (€/л)'€2.50/l' или null
discount_labelitem-card-discount-badge'-10%' или null
popularitem-card-popularity-badge или текст "Popular"true/false
age_restrictedналичие "18+" в карточкеtrue/false
depositрегекс "Excl. ... (XXX)"null или строка залога
image_urlitem-card-image img.src'https://...wolt.com/...jpg'

Пример запроса

{
    "platform": "wolt",
    "url": "https://wolt.com/lang/country/city/restaurant/slug"
}

Опции options.scraperapi описаны в общей документации.

Нюансы