Proxies são essenciais para o scraping de imóveis em plataformas como CIAN, Zillow e Realtor.com: eles permitem contornar geo-restrições, superar bloqueios baseados em IP, controlar a taxa de requisições e manter o anonimato durante a coleta de dados.
Desafios do scraping de dados imobiliários
Sites imobiliários implementam diversas medidas anti-bot para proteger seus dados e sua infraestrutura. Essas medidas incluem:
* Bloqueio por IP: detectar e bloquear endereços IP que fazem requisições demais ou apresentam padrões de navegação não humanos.
* Rate limiting: limitar as requisições vindas de IPs ou user agents específicos.
* Geo-restrições: exibir conteúdo diferente ou bloquear o acesso conforme a localização geográfica do usuário.
* CAPTCHAs: apresentar desafios para verificar a interação humana, geralmente disparados por atividade suspeita.
* Detecção avançada de bots: usar desafios em JavaScript, fingerprinting de navegador e análise comportamental para identificar scripts automatizados.
* Carregamento dinâmico de conteúdo: usar JavaScript para carregar dados, exigindo navegadores headless ou técnicas avançadas de parsing.
Um scraping eficaz exige uma infraestrutura de proxies robusta para contornar esses desafios, garantindo acesso consistente aos dados públicos.
Tipos de proxy para scraping imobiliário
A escolha do tipo de proxy afeta significativamente a taxa de sucesso e o custo do scraping.
Proxies residenciais
Proxies residenciais roteiam o tráfego por endereços IP reais atribuídos por provedores de internet (ISP) a usuários residenciais.
* Vantagens: alto anonimato, difíceis de detectar como proxies, excelentes para contornar geo-restrições e sistemas anti-bot sofisticados. Eles imitam o tráfego de usuários reais.
* Desvantagens: custo por GB geralmente mais alto do que o de proxies de datacenter.
* Recomendação: escolha principal para CIAN, Zillow e Realtor.com, por causa das fortes defesas anti-bot desses sites.
Proxies de datacenter
Proxies de datacenter vêm de data centers comerciais.
* Vantagens: alta velocidade, menor custo por GB, grandes pools de IP.
* Desvantagens: facilmente detectáveis por sistemas anti-bot avançados; os IPs costumam compartilhar sub-redes conhecidas, o que leva a bloqueios rápidos em sites sensíveis.
* Recomendação: não recomendados para CIAN, Zillow ou Realtor.com. Servem principalmente para alvos menos protegidos ou para reconhecimento inicial.
Proxies móveis
Proxies móveis usam endereços IP atribuídos por operadoras de rede móvel a dispositivos móveis.
* Vantagens: maior nível de confiança por parte dos sites-alvo, já que IPs móveis raramente são bloqueados. Muito eficazes contra detecção avançada de bots.
* Desvantagens: custo muito alto, disponibilidade de IPs limitada em comparação com os residenciais.
* Recomendação: considere-os para alvos extremamente difíceis ou quando outros tipos de proxy falharem, mas em geral são exagerados e caros demais para scraping imobiliário padrão.
Proxies rotativos e sessões sticky
- Proxies rotativos: atribuem automaticamente um novo endereço IP a cada requisição ou após um período definido. Isso distribui as requisições por muitos IPs, reduzindo a chance de um único IP ser bloqueado. Essencial para coleta de dados em larga escala.
- Sessões sticky: mantêm o mesmo endereço IP por um tempo determinado (por exemplo, 10 minutos, 30 minutos). Úteis quando o scraping exige manter uma sessão ou navegar por listagens de várias páginas, casos em que a consistência do IP ajuda.
Scraping de plataformas imobiliárias específicas
Cada plataforma apresenta desafios próprios e exige estratégias de proxy sob medida.
CIAN (ЦИАН)
- Mercado principal: Rússia e países da CEI.
- Desafios: o CIAN usa medidas anti-bot sofisticadas e geo-restrições, bloqueando ativamente IPs não russos ou tráfego suspeito. A estrutura do site pode ser complexa e costuma usar carregamento dinâmico de conteúdo.
- Estratégia de proxy:
- Proxies residenciais: obrigatórios. Direcione os IPs por geo para a Rússia ou para grandes cidades russas específicas (por exemplo, Moscou, São Petersburgo).
- Rotação: use rotação de IP frequente para evitar limites de requisições, especialmente ao buscar detalhes de anúncios ou navegar pelos resultados de busca.
- User-Agents: rotacione strings de User-Agent realistas, típicas de navegadores.
- Headers: garanta que os headers
Accept-Languageestejam definidos para russo (ru-RU,ru;q=0.9).
- Principais dados: detalhes do anúncio, preços, contatos do corretor, características do imóvel, dados de localização.
Zillow
- Mercado principal: Estados Unidos.
- Desafios: o Zillow é conhecido pela implementação agressiva de anti-bot e CAPTCHA. Scraping de alto volume sem gestão adequada de proxies resulta em banimento imediato do IP ou em desafios de CAPTCHA. O site depende fortemente de JavaScript para renderizar conteúdo.
- Estratégia de proxy:
- Proxies residenciais: essenciais. Direcione os IPs por geo para os estados ou regiões dos EUA que estão sendo coletados.
- Sessões sticky: considere usar sessões sticky por períodos curtos (por exemplo, 5-10 minutos) ao navegar por listagens de várias páginas ou ao interagir com filtros de busca, para manter uma identidade de navegação consistente.
- User-Agents: imite User-Agents comuns de navegadores desktop e mobile.
- Navegadores headless: frequentemente necessários, com ferramentas como Puppeteer ou Selenium, para executar JavaScript e renderizar conteúdo dinâmico, o que aumenta a chance de acionar sistemas anti-bot se os proxies não forem robustos.
- Principais dados: detalhes do imóvel, histórico de vendas, valores do Zestimate, informações de impostos, dados do corretor, dados do bairro.
Realtor.com
- Mercado principal: Estados Unidos e Canadá.
- Desafios: assim como o Zillow, o Realtor.com implementa defesas anti-bot robustas. Embora às vezes seja percebido como um pouco menos agressivo que o Zillow, um scraping constante e sem gestão ainda leva a bloqueios. O carregamento dinâmico de conteúdo é predominante.
- Estratégia de proxy:
- Proxies residenciais: recomendados. Direcione os IPs por geo para as regiões específicas dos EUA ou do Canadá.
- Rotação: equilibre a frequência de rotação. Rotação frequente demais pode acionar a detecção, se parecer não natural para uma sessão de navegação.
- User-Agents e headers: mantenha headers e User-Agents realistas de navegador.
- Headers Referer: inclua headers
Refererapropriados para imitar uma navegação legítima.
- Principais dados: detalhes do anúncio, histórico do imóvel, contatos do corretor, distritos escolares, demografia do bairro.
Gestão de proxies e boas práticas de scraping
Usar proxies com eficácia vai além de escolher o tipo correto.
Throttling de requisições
Implemente atrasos entre as requisições para imitar padrões humanos de navegação. Randomize os atrasos para evitar padrões previsíveis.
Rotação de User-Agent
Mantenha um pool diverso e realista de strings de User-Agent (por exemplo, Chrome no Windows, Firefox no macOS, Safari no iOS) e rotacione-as a cada requisição ou sessão.
Gestão de headers
Envie um conjunto completo de headers HTTP legítimos (Accept, Accept-Encoding, Accept-Language, Connection, Referer etc.) em cada requisição. Headers ausentes ou inconsistentes podem marcar as requisições como automatizadas.
Gestão de cookies
Trate os cookies adequadamente. Armazene e envie os cookies recebidos do site-alvo para manter o estado da sessão quando necessário. Limpe os cookies em novas sessões, se você quiser uma identidade nova.
Tratamento de erros
Implemente tratamento de erros robusto para códigos de status HTTP como 403 (Forbidden), 429 (Too Many Requests) e para desafios de CAPTCHA. Um 403 ou 429 normalmente indica bloqueio de IP ou limite de requisições, exigindo a troca de proxy.
Resolução de CAPTCHA
Para sites com muitos CAPTCHAs, como o Zillow, integre serviços terceirizados de resolução de CAPTCHA (por exemplo, 2Captcha, Anti-Captcha) ou use um provedor de proxy que ofereça soluções de bypass de CAPTCHA.
Renderização de JavaScript
Para sites que dependem muito de JavaScript (as três plataformas dependem), considere usar navegadores headless (por exemplo, Puppeteer, Playwright, Selenium com undetected_chromedriver) junto com proxies. Isso adiciona overhead, mas garante a renderização completa do conteúdo.
Exemplo de código: usando proxies com Python Requests
Este exemplo mostra como fazer uma requisição através de um proxy residencial usando a biblioteca requests do Python.
import requests
import random
import time
# Lista de proxies residenciais (substitua pela sua lista real de proxies)
# Formato: "http://user:password@ip:port" ou "http://ip:port"
PROXIES = [
"http://user1:[email protected]:8000",
"http://user2:[email protected]:8000",
# ... mais proxies
]
# Lista de strings User-Agent comuns
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/109.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/109.0",
]
def make_proxied_request(url, proxy_list, user_agent_list, retries=3):
for attempt in range(retries):
proxy = random.choice(proxy_list)
user_agent = random.choice(user_agent_list)
proxies = {
"http": proxy,
"https": proxy,
}
headers = {
"User-Agent": user_agent,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
}
try:
print(f"Attempt {attempt + 1}: Fetching {url} via {proxy} with User-Agent: {user_agent[:50]}...")
response = requests.get(url, proxies=proxies, headers=headers, timeout=15)
response.raise_for_status() # Lança HTTPError para respostas com erro (4xx ou 5xx)
print(f"Success! Status Code: {response.status_code}")
return response
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}. Retrying with a different proxy...")
time.sleep(random.uniform(5, 15)) # Aguarda antes de tentar novamente
print("All retry attempts failed.")
return None
# Exemplo de uso:
# target_url_cian = "https://www.cian.ru/rent/flat/288593457/" # Exemplo de anúncio no CIAN
# target_url_zillow = "https://www.zillow.com/homedetails/123-Main-St-Anytown-NY-12345/12345678_zpid/" # Exemplo de anúncio no Zillow
# target_url_realtor = "https://www.realtor.com/realestateandhomes-detail/123-Main-St-Anytown-NY-12345/12345678" # Exemplo de anúncio no Realtor.com
# response = make_proxied_request(target_url_zillow, PROXIES, USER_AGENTS)
# if response:
# print(response.text[:500]) # Imprime os primeiros 500 caracteres da resposta
Comparação: tipos de proxy para scraping imobiliário
| Tipo de proxy | Taxa de sucesso (CIAN/Zillow/Realtor) | Custo (relativo) | Capacidade de geo-targeting | Evasão de anti-bot | Observações |
|---|---|---|---|---|---|
| Residencial | Alta | Médio-alto | Excelente | Alta | Recomendado para todos os sites-alvo. |
| Datacenter | Baixa | Baixo | Boa | Baixa | Facilmente detectado; não recomendado. |
| Móvel | Muito alta | Muito alto | Boa (regional) | Muito alta | Uso de nicho para bloqueios muito persistentes. |
Comparação: CIAN vs. Zillow vs. Realtor.com no scraping
| Característica | CIAN (ЦИАН) | Zillow | Realtor.com |
|---|---|---|---|
| Mercado principal | Rússia, CEI | Estados Unidos | Estados Unidos, Canadá |
| Agressividade anti-bot | Alta | Muito alta (CAPTCHAs comuns) | Alta |
| Proxy recomendado | Residencial (IPs russos) | Residencial (IPs dos EUA) | Residencial (IPs EUA/CA) |
| Principais dados | Detalhes do anúncio, preços, dados do corretor, características do imóvel | Detalhes do imóvel, dados históricos, Zestimates, dados de impostos | Detalhes do anúncio, histórico do imóvel, dados do corretor, dados do bairro |
| Renderização de JS | Necessária para a maior parte do conteúdo | Fortemente necessária | Fortemente necessária |
| Geo-targeting | Essencial (Rússia) | Essencial (estados/regiões dos EUA) | Essencial (regiões EUA/Canadá) |
