Yelp 비즈니스 및 리뷰 데이터를 시장 조사에 활용하는 방법

Yelp은 지난 1년 동안 봇 방지 태세를 강화했으며, 이용 약관에서는 스크래핑을 명시적으로 금지하고 있습니다. 데이터 구조, 주거용 지리 IP가 데이터를 접근하는 방법, 그리고 알아두면 좋은 준수 경로에 대해 설명합니다.

Yelp은 지역 비즈니스 인텔리전스의 가장 풍부한 소스 중 하나로, 수백만 개의 목록에 대한 평점, 리뷰 텍스트, 연락처 정보 및 카테고리 데이터를 제공합니다. 또한 스크래핑하기 까다로운 대상 중 하나입니다. Yelp의 이용 약관에서는 스크래핑을 명시적으로 금지하고 있으며, 사이트는 지난 1년 동안 봇 방지 태세를 눈에 띄게 강화했기 때문에 이전에 작동하던 간단한 스크립트가 이제는 벽에 부딪힙니다. 이 가이드는 Yelp가 데이터를 구조화하는 방법, 지리적으로 일치하는 주거용 프록시가 데이터를 접근하는 방법, 실질적인 한계, 그리고 무엇이든 구축하기 전에 알아두면 좋은 준수 경로에 대해 다룹니다.

스크래핑 가치와 이용 약관의 현실

가치 있는 필드는 명백한 것들입니다: 비즈니스 이름, 주소, 전화번호, 별점, 리뷰 수, 카테고리, 그리고 리뷰어의 감정이 담긴 리뷰 텍스트 자체입니다. 메트로 전역에서 집계된 이 데이터는 경쟁자 분석, 지역 시장 크기 측정 및 감정 추적을 주도합니다. 시작하기 전에 규칙에 대해 명확히 이해하십시오. Yelp의 지원 페이지는 사이트가 콘텐츠의 스크래핑, 인덱싱 또는 마이닝을 허용하지 않는다고 명시하고 있습니다. 이는 기술적으로 수집이 불가능하다는 것을 의미하지는 않지만, 이 대상에 대해 가치를 이용 약관과 비교하고, 공개된 비개인 데이터를 선호하며, 볼륨을 적당히 유지해야 한다는 것을 의미합니다. 2026년 웹 스크래핑의 합법성에 대한 개요는 더 넓은 그림을 제공합니다 - 그러나 이것은 법률 자문이 아닙니다.

Yelp가 데이터를 구조화하는 방법

가장 유용한 점: 원하는 데이터는 거의 보이는 HTML에 없습니다. Yelp는 <script> 태그에 내장된 JSON에서 페이지를 하이드레이션하며, 리뷰 목록은 내부 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

리뷰 페이지는 대략 10단위로 증가하는 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 결과는 위치에 따라 다르므로, 출구 도시는 당신이 보는 것을 결정합니다. 렌더링된 HTML이 아닌 내장된 JSON을 파싱하십시오.

지리적 타겟팅이 전부입니다

Yelp는 지역 제품이므로, 결과는 요청이 어디에서 오는지에 크게 의존합니다. 뉴욕 출구에서 제공되는 "커피" 검색은 샌프란시스코 출구에서의 동일한 검색과 다른 비즈니스와 순서를 반환합니다. 특정 메트로를 대상으로 하는 연구의 경우, 프록시는 해당 메트로에서 종료되어야 하며, 그렇지 않으면 왜곡된 데이터를 반환합니다. 200개 이상의 국가에서 도시 수준 타겟팅이 가능한 주거용 프록시 풀은 분석 중인 시장에 출구를 고정할 수 있게 해주며, 이는 또한 Yelp의 봇 방지 레이어가 지역 트래픽에 기대하는 신뢰 밴드 내에 머물게 합니다.

지리적 제어는 Yelp가 지원하는 가장 가치 있는 분석을 잠금 해제합니다: 메트로 간 동일한 카테고리를 비교하는 것입니다. 하나의 쿼리 - "커피", "배관공", "체육관" - 를 10개의 일치하는 주거용 출구에서 10개의 도시로 실행하면 도시별 평균 평점, 리뷰 볼륨 및 가격 계층을 얻을 수 있습니다. 이 비교 데이터셋은 지역 시장 크기 측정의 중추이며, 단일 위치 스크래핑으로는 이를 생성할 수 없습니다.

지리 타겟팅된 주거용 프록시 얻기

봇 방지 강화 통과하기

Yelp가 탐지를 강화한 이후, 완료되는 실행과 도전에서 멈추는 실행을 구분하는 세 가지가 있습니다. 데이터센터 범위가 아닌 타겟 지오에 맞춘 주거용 IP를 사용하십시오. 전체, 일관된 브라우저 헤더 세트를 보내십시오 - 일치하는 AcceptAccept-Language가 있는 실제 Chrome 또는 Safari User-Agent를 사용하고, 기본 라이브러리 문자열은 사용하지 마십시오. 그리고 한 IP에서의 폭발은 가장 빠른 트리거이므로 보수적으로 페이스를 조절하십시오. Yelp가 JavaScript 도전이나 CAPTCHA로 에스컬레이트할 때, 이는 JavaScript를 렌더링하고 실제 브라우저 지문을 가지고 있으며 IP를 회전시키는 Scraper API에 페이지를 넘기는 신호입니다 - 보통 더 적은 코드로 더 높은 성공률을 제공합니다.

Yelp 데이터를 얻는 세 가지 방법 비교 - 공개 페이지 스크래핑, 공식 Fusion API, 그리고 개방형 데이터셋 - 규모, 신선도 및 준수성에 따라 평가
구축하기 전에 세 가지 경로를 평가하십시오: 유연한 스크래핑, 승인된 Fusion API, 또는 무료이지만 정적인 개방형 데이터셋.

알아두면 좋은 준수 가능한 대안

스크래핑을 시작하기 전에 두 가지 승인된 경로를 평가하십시오. Yelp의 공식 Fusion API는 비즈니스 세부 정보와 API 키 및 속도 제한 하에 잘린 리뷰 데이터를 반환합니다 - 유연성은 낮지만, 이용 약관과의 마찰은 없습니다. 그리고 Yelp는 연구 목적으로 수백만 개의 리뷰, 사진 및 비즈니스 속성의 개방형 데이터셋을 자체 라이선스 하에 게시합니다; 이는 실시간 데이터가 아닌 정적 스냅샷이지만, 모델 훈련이나 역사적 분석에는 종종 충분합니다. 여러 소스에 걸친 실시간 경쟁자 및 리뷰 모니터링의 경우, 동일한 기술이 Google Maps 비즈니스 데이터, Trustpilot 리뷰TripAdvisor에 전이됩니다.

자주 묻는 질문

Yelp를 스크래핑하는 것이 합법적인가요?

Yelp의 이용 약관은 스크래핑, 인덱싱 및 콘텐츠 마이닝을 명시적으로 금지하므로, 공개 페이지를 대상으로 하더라도 수집은 사이트의 명시된 규칙에 반합니다. 리뷰어 이름도 GDPR 및 유사 법률 하에 개인 데이터입니다. Fusion API나 개방형 데이터셋이 적합한 경우 이를 선호하고, 볼륨을 적당히 유지하며, 대규모로 진행할 경우 변호사와 상담하십시오. 이것은 법률 자문이 아닙니다.

Yelp 검색당 몇 개의 결과를 스크래핑할 수 있나요?

평균적으로 검색당 약 240개의 비즈니스, 이는 Yelp가 결과 페이지네이션의 깊이를 제한하기 때문입니다. 시장을 완전히 커버하려면, 하나의 넓은 검색을 페이지네이션하기보다는 도시, 카테고리 및 이웃으로 쿼리를 세분화하십시오 - 많은 좁은 쿼리가 하나의 깊은 쿼리를 이깁니다.

왜 다른 서버에서 다른 Yelp 결과를 얻나요?

Yelp는 위치 인식 기능이 있으며 요청 IP의 지리적 위치에 따라 결과를 개인화합니다. 다른 도시나 국가에서 실행된 검색은 다른 비즈니스와 순서를 반환합니다. 정확한 지역 연구를 위해, 분석 중인 정확한 메트로에서 종료되는 주거용 프록시를 사용하십시오.

Yelp 페이지의 데이터는 어디에 있나요?

대부분 내장된 JSON에 있으며, 보이는 HTML에는 없습니다. Yelp는 &lt;script&gt; 태그 내의 JSON에서 React 페이지를 하이드레이션하며, 리뷰는 내부 JSON 엔드포인트에서 로드되므로, 내장된 페이로드를 파싱하는 것이 자주 변경되는 DOM에 대한 CSS 선택자 일치를 시도하는 것보다 더 신뢰할 수 있습니다.

Yelp는 올바른 접근 방식으로 스크래핑할 수 있습니다 - 내장된 JSON을 파싱하고, 주거용 IP로 타겟 메트로에서 종료하며, 검색당 약 240개의 한계를 존중하고, 보수적으로 페이스를 조절하십시오. 그러나 Yelp의 이용 약관과 준수 가능한 Fusion API 및 개방형 데이터셋과 비교하십시오. 봇 방지 레이어가 에스컬레이트할 때, 관리되는 Scraper API가 실용적인 다음 단계입니다.

Scraper API로 지역 타겟을 강력하게 스크래핑하세요