Aviso legal: Este guia aborda apenas o acesso a dados públicos que não exigem login. Antes de raspar o Yelp, leia os Termos de Serviço da plataforma. Nos EUA, o Computer Fraud and Abuse Act (CFAA) pode aplicar-se a acessos não autorizados; na UE, o GDPR restringe o processamento de dados pessoais, incluindo textos de avaliações identificáveis. Quando a API oficial cobrir sua necessidade, use-a.
Se você está construindo um dataset de negócios locais, precisa saber como raspar listings de negócios e avaliações do Yelp em 2026 sem ser bloqueado nas primeiras 50 requisições. O Yelp combina defesas anti-bot agressivas (PerimeterX/HUMAN), fingerprinting de TLS e bloqueios por reputação de IP. Neste guia, cobrimos o que é acessível sem login, as defesas que você enfrentará e como configurar proxies residenciais rotativos com geo dos EUA para manter uma taxa de sucesso alta.
O que é publicamente acessível no Yelp sem login
Perfis de negócios em /biz/<slug> são renderizados no HTML público. Sem autenticação, você consegue extrair:
- Nome do negócio, endereço, telefone e URL do site
- Categorias (ex.: Restaurante Italiano, Pizzaria)
- Horário de funcionamento por dia
- Nota agregada (1–5 estrelas) e contagem total de avaliações
- Texto das avaliações visíveis na página inicial do perfil
- Fotos públicas e atributos do estabelecimento (estacionamento, Wi-Fi, etc.)
Em contraste, a API Fusion do Yelp retorna apenas três avaliações por negócio no endpoint /businesses/{id}/reviews, com limite de 5.000 requisições/dia no plano padrão. Para datasets de análise de sentimento ou monitoramento de reputação que precisam de todas as avaliações, a API oficial é insuficiente — daí a necessidade de raspagem da página pública.
Regra prática: se o dado está no HTML sem login, é candidato a raspagem de dados públicos. Qualquer coisa atrás de login (mensagens privadas, dados de usuário autenticado) está fora dos limites éticos e legais deste guia.
As defesas anti-bot do Yelp: PerimeterX, TLS e CAPTCHAs
O Yelp utiliza o PerimeterX (agora HUMAN Security) como camada principal de defesa. Os sinais que você precisa contornar:
O cookie _px3 e o sensor challenge
O PerimeterX emite um cookie _px3 após um challenge JavaScript que mede centenas de variáveis do navegador (canvas, WebGL, timing de eventos, fingerprint de fontes). Sem um _px3 válido, requisições subsequentes recebem HTTP 403 ou um challenge interativo. O cookie expira tipicamente em algumas horas, exigindo rotação de sessão.
Fingerprinting de TLS (JA3/JA4)
O PerimeterX inspeciona o handshake TLS do cliente. Bibliotecas HTTP padrão como requests e node-fetch têm assinaturas JA3 distintas dos navegadores reais. Um servidor anti-bot pode bloquear um IP só pelo JA3 antes mesmo de inspecionar o HTTP. Mitigações: usar um cliente HTTP com TLS impersonation (ex.: curl_cffi em Python) ou um navegador headless real.
CAPTCHAs após poucas requisições de datacenter
IPs de datacenter têm reputação baixa por padrão. Em testes típicos, 5–15 requisições de um IP datacenter são suficientes para disparar um challenge PerimeterX ou um CAPTCHA. Por isso, proxies datacenter são inadequados para raspagem do Yelp em escala.
Por que proxies residenciais rotativos com geo dos EUA
O Yelp serve resultados localizados por IP. Um negócio em Austin, TX, pode aparecer diferente para um IP em São Paulo versus um IP no Texas. Para capturar listings precisos, você precisa de IPs residenciais geolocalizados nos EUA.
Proxies residenciais têm reputação de IP alta porque pertencem a provedores de internet reais (AT&T, Comcast, Verizon). O PerimeterX pontua reputação de IP; IPs residenciais passam com taxa de sucesso acima de 90% em condições normais, contra menos de 30% para datacenter.
| Tipo de proxy | Reputação de IP | Taxa de sucesso típica no Yelp | Custo relativo |
|---|---|---|---|
| Datacenter | Baixa | 10–30% | $ |
| Residencial rotativo | Alta | 85–95% | $$ |
| Mobile (4G/5G) | Muito alta | 90–98% | $$$ |
Para a maioria dos casos de uso, residenciais rotativos com geo -country-US oferecem o melhor equilíbrio custo-benefício. Veja as localizações disponíveis no ProxyHat.
Configurando o ProxyHat para raspagem do Yelp
Configure o ProxyHat passando flags de geo e sessão no campo username. Para negócios em Austin:
http://user-country-US-city-austin:pass@gate.proxyhat.com:8080
Para manter a mesma sessão (mesmo IP de saída) durante a paginação de um perfil, adicione -session-:
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080
Consulte a documentação do ProxyHat para o formato completo de flags. Para detalhes de planos, veja a página de preços.
Exemplo 1: Python com requests e ProxyHat
Este exemplo acessa um perfil de negócio, extrai o blob __INITIAL_STATE__ embutido no HTML e analisa uma avaliação truncada. Use curl_cffi para impersonation de TLS se encontrar bloqueios por JA3.
import re, json, requests
PROXY = "http://user-country-US-city-austin-session-abc123:pass@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
url = "https://www.yelp.com/biz/uchi-austin"
resp = requests.get(url, proxies=proxies, headers=headers, timeout=30)
# O Yelp embute JSON em __INITIAL_STATE__ dentro de uma tag script
m = re.search(r"<script[^>]*>__INITIAL_STATE__\s*=\s*({.*?})</script>",
resp.text, re.S)
if not m:
raise RuntimeError("Não foi possível localizar __INITIAL_STATE__")
state = json.loads(m.group(1))
# Caminho aproximado — ajuste conforme a estrutura atual
reviews = state.get("biz", {}).get("reviews", [])
for r in reviews[:3]:
print(r.get("user", {}).get("name"), "->", r.get("text", "")[:120])
Esse snippet imprime as três primeiras avaliações com texto truncado em 120 caracteres. A estrutura exata do __INITIAL_STATE__ muda entre releases — inspecione o JSON retornado antes de indexar campos.
Exemplo 2: Node.js sobre SOCKS5 (porta 1080)
Para fluxos que precisam de SOCKS5 (ex.: túneis mais estáveis ou compatibilidade com bibliotecas específicas), use a porta 1080 do ProxyHat.
const { SocksProxyAgent } = require('socks-proxy-agent');
const fetch = require('node-fetch');
const proxy = 'socks5://user-country-US-session-biz456:pass@gate.proxyhat.com:1080';
const agent = new SocksProxyAgent(proxy);
const headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ' +
'AppleWebKit/537.36 (KHTML, like Gecko) ' +
'Chrome/124.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
};
(async () => {
const res = await fetch('https://www.yelp.com/biz/uchi-austin', {
agent,
headers,
timeout: 30000,
});
const html = await res.text();
const m = html.match(/__INITIAL_STATE__\s*=\s*({[\s\S]*?})<\/script>/);
if (!m) throw new Error('Estado não encontrado');
const state = JSON.parse(m[1]);
console.log('Status:', res.status, 'Tamanho:', html.length, 'bytes');
})();
Paginação, pacing e rotação de sessão
Paginação de avaliações
O Yelp pagina avaliações via parâmetro start (ex.: ?start=20 para a segunda página de 20 avaliações). Mantenha o mesmo -session- durante toda a paginação de um perfil para preservar o contexto de IP e o cookie _px3.
Pacing e rate limits
- Limite a 1 requisição por 3–5 segundos por sessão
- Use 50–100 sessões concorrentes no máximo para distribuir carga
- Adicione jitter aleatório (±1 segundo) para evitar padrões detectáveis
- Monitore HTTP 429 e 403 como sinal para pausar e rotar sessão
Rotação de User-Agents
Combine cada sessão com um User-Agent consistente. Trocar User-Agent no meio de uma sessão é um sinal de bot mais forte do que manter o mesmo. Roteie User-Agents entre sessões, não dentro delas. Use strings de navegadores reais e recentes (Chrome 120+, Firefox 120+, Safari 17+).
Erros comuns e casos de borda
- JSON malformado no
__INITIAL_STATE__: o Yelp às vezes inclui caracteres de escape que quebramjson.loads. Use um parser tolerante ou extraia via expressão regular mais permissiva. - Perfil sem avaliações: negócios novos podem ter zero avaliações — trate arrays vazios sem lançar exceção.
- Redirecionamentos de geo: um IP fora dos EUA pode redirecionar para uma versão internacional. Sempre use
-country-USpara negócios americanos. - CAPTCHAs intermitentes: mesmo com residenciais, 2–5% das requisições podem receber challenge. Implemente retry com nova sessão.
- Horário de funcionamento sazonal: o Yelp pode mostrar horários de feriado; capture o campo
hourscom timestamp para contexto.
Raspagem ética e quando usar a API oficial
Raspagem não é ilegal por si só, mas tem limites. Princípios práticos:
- Respeite o
robots.txt. Verifique o que o Yelp permite em yelp.com/robots.txt antes de raspá-lo. - Não acesse conteúdo behind login. Mensagens privadas, perfis de usuário autenticados e dados de proprietários de negócio estão fora dos limites.
- Minimize dados pessoais. Textos de avaliações podem conter informações identificáveis. Sob o GDPR, você precisa de base legal para processá-los. Considere anonimizar ou agregar.
- Use a Fusion API quando suficiente. Se três avaliações por negócio e 5.000 requisições/dia bastam para seu caso, a API oficial é mais estável, legalmente mais segura e mais barata em custo de manutenção.
- Armazene com responsabilidade. Criptografe dados em repouso, defina retenção e não revenda datasets sem revisão legal.
Para casos de uso de monitoramento de preços e SERP tracking, veja nossos guias de web scraping e SERP tracking.
Key Takeaways: Use proxies residenciais rotativos com geo -country-US para contornar PerimeterX. Mantenha sessão estável durante paginação. Roteie User-Agents entre sessões, não dentro delas. Limite a 1 req/3–5s por sessão. Prefira a Fusion API quando três avaliações por negócio forem suficientes.
Conclusão e próximos passos
Raspar o Yelp em 2026 exige uma combinação de proxies residenciais de alta reputação, controle fino de sessão e respeito a limites éticos e legais. Com o ProxyHat, você pode geolocalizar IPs por cidade dos EUA, manter sessões sticky durante paginação e escalar para centenas de negócios com taxa de sucesso acima de 90%. Comece pequeno, valide sua pipeline em 50 perfis e expanda gradualmente. Se sua necessidade for coberta pela Fusion API, comece por lá — é o caminho mais sustentável.






