Как собирать данные Yelp о бизнесе и отзывах для маркетинговых исследований

Yelp ужесточила свою политику против ботов в прошлом году, и её условия категорически запрещают сбор данных. Вот как структурированы данные, как к ним получают доступ с помощью геолокационных IP-адресов, и какие законные пути стоит знать.

Yelp — один из богатейших источников информации о местном бизнесе: рейтинги, тексты отзывов, контактные данные и данные о категориях по миллионам списков. Это также одна из самых сложных целей для сбора данных. Условия Yelp категорически запрещают сбор данных, и сайт заметно ужесточил свою политику против ботов в прошлом году, поэтому простые скрипты, которые работали раньше, теперь сталкиваются с препятствиями. Это руководство охватывает, как Yelp структурирует свои данные, как к ним получают доступ с помощью геолокационных резидентных прокси, практические ограничения и законные пути, которые стоит знать, прежде чем что-либо строить.

Что стоит собирать - и реальность условий использования

Ценные поля очевидны: название бизнеса, адрес, номер телефона, звездный рейтинг, количество отзывов, категория и сам текст отзыва с настроением рецензента. В агрегированном виде по метрополии эти данные позволяют проводить анализ конкурентов, оценку локального рынка и отслеживание настроений. Прежде чем начать, будьте ясны в отношении правил. На страницах поддержки Yelp указано, что сайт не разрешает сбор, индексацию или добычу своего контента в соответствии с Разделом 6(b) своих Условий использования. Это не делает сбор технически невозможным, но означает, что это цель, где вы взвешиваете ценность против условий, предпочитаете публичные неперсональные данные и сохраняете объем скромным. Наш обзор законности веб-скрейпинга в 2026 году дает более широкую картину - и это не является юридической консультацией.

Как Yelp структурирует свои данные

Самое полезное, что нужно знать: данные, которые вам нужны, редко находятся в видимом HTML. Yelp наполняет свои страницы из JSON, встроенного в теги <script>, а списки отзывов загружаются из внутренних JSON-эндпоинтов. Поэтому надежный подход - захватить встроенный пакет, а не бороться с хрупкими CSS-селекторами против React DOM:

import requests, re, json

proxy = "http://USER:PASS@us.quantumproxies.io:8000"  # geo-matched
proxies = {"http": proxy, "https": proxy}
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
}

r = requests.get("https://www.yelp.com/biz/example-business-san-francisco",
                 headers=headers, proxies=proxies, timeout=25)

# Yelp embeds page state as JSON inside script tags
for blob in re.findall(r'<script[^>]+application/json[^>]*>(.*?)</script>', r.text, re.S):
    try:
        data = json.loads(blob)
    except ValueError:
        continue
    # inspect data for businessName, rating, reviewCount, phone

Страницы отзывов разбиваются на страницы с помощью смещения start, которое увеличивается примерно на десять. Здесь важен практический потолок: автоматический сбор данных Yelp обычно достигает около 240 результатов на поиск, потому что Yelp ограничивает глубину своей пагинации результатов. Планируйте свое покрытие вокруг этого ограничения - сегментируйте по городу, категории и району, а не пытайтесь пролистывать одну широкую запрос:

def yelp_search(term, loc, cap=240):
    """Page a Yelp search via the `start` offset (steps of 10, ~240 ceiling)."""
    results = []
    for start in range(0, cap, 10):
        r = requests.get("https://www.yelp.com/search",
                         params={"find_desc": term, "find_loc": loc, "start": start},
                         headers=headers, proxies=proxies, timeout=25)
        page = parse_hydration(r.text)   # your JSON extractor from above
        if not page:
            break                          # empty page = end of results
        results.extend(page)
    return results

Две заметки о парсинге сэкономят часы. Текст отзывов Yelp и метаданные рецензентов находятся во встроенном пакете рядом с полями бизнеса, поэтому, как только вы найдете правильный JSON-блок, вам редко понадобится второй запрос на страницу. И поскольку сайт является приложением React, видимые имена классов часто меняются, в то время как схема встроенных данных гораздо более стабильна - привяжите извлечение к JSON-ключам, а не к DOM, и ваш скрейпер переживет редизайны, которые ломают инструменты на основе селекторов за ночь.

Гео-осведомленная линия скрейпинга Yelp, показывающая поисковый запрос и город, направленный через резидентный выход в целевом метро, затем парсинг встроенного JSON в строки бизнеса и отзывов
Результаты Yelp зависят от местоположения, поэтому город выхода определяет, что вы видите. Парсите встроенный JSON, а не отрендеренный HTML.

Геотаргетинг - это вся игра

Yelp - это локальный продукт, поэтому результаты сильно зависят от того, откуда, по-видимому, исходит запрос. Поиск "кофе" для выхода в Нью-Йорке возвращает другие бизнесы и порядок, чем тот же поиск из Сан-Франциско. Если ваши исследования нацелены на конкретное метро, ваш прокси должен выходить в этом метро - все остальное возвращает искаженные данные. Пул резидентных прокси с таргетингом на уровне города в более чем 200 странах позволяет закрепить выход на рынок, который вы анализируете, что также удерживает вас в доверительном диапазоне, который ожидает слой защиты от ботов Yelp для локального трафика.

Гео-контроль также открывает самый ценный анализ, который поддерживает Yelp: сравнение одной и той же категории по метрополиям. Запустите один запрос - "кофе", "сантехники", "тренажерные залы" - по десяти городам из десяти соответствующих резидентных выходов, и вы получите средние рейтинги, объем отзывов и ценовой уровень по городам. Этот сравнительный набор данных является основой для оценки локального рынка, и ни один скрейп из одного местоположения не может его создать.

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

Как обойти борьбу с ботами

С тех пор как Yelp ужесточила обнаружение, три вещи отделяют успешный запуск от того, который останавливается на вызовах. Используйте резидентные IP, соответствующие целевой геолокации, а не диапазоны дата-центров. Отправляйте полный, согласованный набор заголовков браузера - настоящий User-Agent Chrome или Safari с соответствующими Accept и Accept-Language, а не строку по умолчанию из библиотеки. И соблюдайте консервативный темп с джиттером, потому что всплески с одного IP - это самый быстрый триггер. Когда Yelp все равно переходит к вызовам JavaScript или CAPTCHA, это сигнал остановить ручную работу и передать страницу Scraper API, который рендерит JavaScript, имеет настоящий отпечаток браузера и вращает IP за вас - обычно более высокий уровень успеха за меньшее количество кода.

Три способа получения данных Yelp - сравнение скрейпинга публичных страниц, официального Fusion API и открытого набора данных - оценены по масштабу, свежести и соответствию
Взвесьте три маршрута, прежде чем строить: гибкий скрейпинг, санкционированный Fusion API или бесплатный, но статический открытый набор данных.

Законные альтернативы, которые стоит знать

Прежде чем приступить к скрейпингу, взвесьте два санкционированных маршрута. Официальный Fusion API Yelp возвращает детали бизнеса и сокращенный фрагмент данных отзывов под API-ключом и лимитами скорости - меньшая гибкость, но без трений с условиями использования. И Yelp публикует открытый набор данных из миллионов отзывов, фотографий и атрибутов бизнеса для исследовательского использования под собственной лицензией; это статический снимок, а не живые данные, но для обучения моделей или исторического анализа это часто все, что вам нужно. Для живого мониторинга конкурентов и отзывов по источникам те же техники переносятся на данные о бизнесе Google Maps, отзывы Trustpilot и TripAdvisor.

Часто задаваемые вопросы

Законно ли собирать данные Yelp?

Условия использования Yelp явно запрещают сбор, индексацию и добычу его контента, поэтому сбор происходит вразрез с заявленными правилами сайта, даже когда он нацелен на публичные страницы. Имена рецензентов также являются персональными данными в соответствии с GDPR и аналогичными законами. Предпочитайте Fusion API или открытый набор данных, где они подходят, сохраняйте объем скромным и консультируйтесь с юристом для всего, что касается масштаба. Это не является юридической консультацией.

Сколько результатов можно собрать за один поиск Yelp?

Примерно 240 бизнесов за поиск в среднем, потому что Yelp ограничивает глубину своей пагинации результатов. Чтобы полностью охватить рынок, сегментируйте свои запросы по городу, категории и району, а не пролистывайте один широкий поиск - много узких запросов лучше, чем один глубокий.

Почему я получаю разные результаты Yelp с разных серверов?

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

Где находятся данные на странице Yelp?

В основном во встроенном JSON, а не в видимом HTML. Yelp наполняет свои React-страницы из JSON внутри тегов &lt;script&gt; и загружает отзывы из внутренних JSON-эндпоинтов, поэтому парсинг встроенного пакета более надежен, чем сопоставление CSS-селекторами с DOM, который часто меняется.

Yelp можно скрейпить с правильным подходом - парсите встроенный JSON, выходите из целевого метро на резидентных IP, соблюдайте потолок в ~240 результатов на поиск и соблюдайте консервативный темп. Но сначала взвесьте это против условий Yelp и законных Fusion API и открытого набора данных. Когда слой защиты от ботов усиливается, управляемый Scraper API - это прагматичный следующий шаг.

Скрейпинг сложных локальных целей с помощью Scraper API