Ir para o conteúdo

Como alternar proxies para web scraping bem-sucedido

Como um especialista experiente em web scraping, já me deparei com problemas de bloqueio de proxy repetidas vezes. Não consigo enfatizar o suficiente o quão crítica é a rotação adequada de proxy para uma web scraping bem-sucedida em grande escala.

Neste guia abrangente de mais de 3000 palavras, nos aprofundaremos nas estratégias ideais de rotação de proxy para evitar bloqueios e raspar com eficiência.

Por que a rotação de proxy é essencial para web scraping

Vamos recapitular rapidamente por que os proxies são necessários na web scraping.

Ao raspar um site, você atinge seus servidores com centenas ou milhares de solicitações automatizadas em um curto espaço de tempo. Esse padrão de tráfego altamente suspeito é facilmente detectado pelo site alvo.

Para identificar e bloquear scrapers, a maioria dos sites emprega proteções como:

  • Limitação de taxa de IP – Limita quantas solicitações um IP pode fazer em um período de tempo
  • Captcha – Apresenta um desafio para validar que você é humano
  • blocos de IP – Bane seu endereço IP se for detectado como um scraper

Agora, se você não usa proxies, todo o tráfego do scraper se origina de um único IP residencial ou de datacenter.

Não demorará muito para que seu IP atinja um limite de taxa ou seja completamente bloqueado.

Com base na minha experiência, eis o que acontece ao extrair de um único IP:

  • Depois de 50-100 solicitações, você provavelmente atingirá um limite de taxa e terá que desacelerar para 1 solicitação a cada 10 ou mais segundos. Isso reduz drasticamente a velocidade de raspagem.

  • Depois de 200-500 solicitações, há uma grande chance de acionar um captcha para validar que você não é um bot. Resolver captchas manualmente diminui a velocidade de raspagem.

  • Depois de 500-1,000 solicitações, você provavelmente terá seu IP completamente bloqueado. Game Over.

Como você pode ver, é impossível extrair qualquer número significativo de páginas sem proxies.

É aqui que entra a rotação de proxy.

Rotação de proxy significa distribuir as solicitações do seu scraper em vários endereços IP usando servidores proxy. Isso permite que você:

  • Evite que todo o tráfego seja originado de um IP que pode ser facilmente sinalizado para raspagem.

  • Aumente o número de solicitações enquanto permanece abaixo dos limites de taxa do site de destino.

  • Continue raspando mesmo que alguns proxies sejam bloqueados, trocando-os rapidamente.

Deixe-me compartilhar um exemplo real que prova por que a rotação de proxy é crítica.

Recentemente, fui contratado para extrair 50,000 listagens de produtos de um site de comércio eletrônico. Sem proxies, eis o que aconteceu:

  • Cerca de 500 solicitações, comecei a acertar captchas e atrasos de 5 segundos entre as solicitações. A raspagem diminuiu a velocidade.

  • Em 2000 solicitações, meu IP foi completamente bloqueado pelo site. A raspagem foi interrompida.

Agora, mudei para a rotação de apenas 5 proxies residenciais, aqui estão os resultados:

  • Cada proxy fez cerca de 500 solicitações antes de precisar desacelerar para evitar captchas.

  • Nenhum proxy foi bloqueado porque continuei girando para um novo IP.

  • Raspei com sucesso todas as 50,000 listagens distribuindo a carga entre proxies.

Este exemplo real mostra claramente como a rotação de proxy pode significar a diferença entre algumas centenas de páginas copiadas e dezenas de milhares.

Com base na minha experiência, a rotação de proxy é obrigatório para qualquer operação séria de web scraping.

A seguir, vamos dar uma olhada em algumas estratégias inteligentes de rotação de proxy que você deve usar.

Estratégias de rotação de proxy

Existem vários padrões comprovados de rotação de proxy que podem otimizar o desempenho de raspagem. Algumas abordagens populares incluem:

Round Robin

Este método percorre sua lista de IPs proxy em sequência.

Por exemplo, com 3 proxies:

Request 1 -> Proxy 1 
Request 2 -> Proxy 2
Request 3 -> Proxy 3
Request 4 -> Proxy 1
Request 5 -> Proxy 2

A rotação round robin garante que distribuímos solicitações de maneira bastante uniforme entre todos os proxies. Impede a reutilização repetida do mesmo proxy.

A principal desvantagem é que, se um proxy for bloqueado, ele continuará sendo escolhido a cada rotação.

Com base em meus testes, o round robin funciona decentemente com um pool de tamanho médio de 5 a 10 proxies saudáveis.

Proxy Aleatório

Esta estratégia escolhe um proxy completamente aleatório do pool para cada solicitação.

Request 1 -> Proxy 3
Request 2 -> Proxy 2
Request 3 -> Proxy 5
Request 4 -> Proxy 1
Request 5 -> Proxy 8 

A seleção aleatória de proxy fornece total imprevisibilidade na forma como os proxies são usados. Os sites têm dificuldade em detectar padrões com rotação aleatória.

O risco é que a randomização às vezes pode resultar na escolha repetida do mesmo proxy por acaso. Algoritmos de randomização habilidosos são necessários para evitar isso.

Descobri que a rotação aleatória de proxy funciona melhor com conjuntos maiores de 15 a 25+ proxies.

Com base no desempenho

Métodos mais avançados rastreiam a taxa de sucesso/falha do proxy e escolhem os proxies de acordo.

Por exemplo, proxies que executam captchas ou blocos são menos usados, enquanto proxies de alto desempenho são mais usados.

Isso requer alguma lógica para detectar falhas de proxy e manter estatísticas em cada proxy. Mas garante que maximizamos o uso de proxies “saudáveis”.

Na minha experiência, a rotação baseada no desempenho produz os melhores resultados, mas requer mais esforço de codificação para ser implementada.

Consistência de IP

Alguns sites raspam impressões digitais detectando inconsistências de IP nas sessões do usuário.

Por exemplo, se durante uma única sessão de usuário o site vir solicitações de IPs diferentes, é um sinal de alerta para raspagem.

A rotação de consistência de IP garante que cada proxy lide com todo o tráfego de uma sessão de usuário individual. Assim, o site de destino vê IPs consistentes para cada usuário.

Essa técnica é útil ao extrair sites com sessões de usuários altamente monitoradas, como mídias sociais e comércio eletrônico.

Dica de especialista

"Uma armadilha comum é a rotação de proxies muito rápida. Trocar IPs a cada solicitação costuma ser um exagero. Normalmente, faço a rotação gradualmente a cada 50-100 solicitações por proxy. Isso evita padrões de pegada que podem parecer suspeitos."

Não importa qual estratégia de rotação você use, é importante gire gradualmente e não muito agressivamente. Os sites podem detectar a comutação de IP hiperfrequente como uma pegada de raspagem.

Agora vamos dar uma olhada em algumas dicas importantes para otimizar sua rotação de proxy…

Melhores práticas para rotação de proxies

Por meio de extensas tentativas e erros, identifiquei algumas práticas recomendadas de rotação de proxy:

Girar por sub-rede proxy

Muitos proxies vêm dos mesmos intervalos de sub-redes de grandes provedores como Luminati ou Smartproxy.

A rotação aleatória pode resultar no aparecimento de proxies em sequência se forem da mesma sub-rede.

Request 1 -> 123.45.67.89 (Subnet A)
Request 2 -> 123.45.67.93 (Subnet A again!) 

IPs repetidos do mesmo intervalo de sub-rede são uma indicação infalível para raspagem.

Certifique-se de alternar ativamente entre diferentes sub-redes e provedores de proxy. Nunca escolha dois proxies seguidos da mesma sub-rede.

Use uma combinação saudável de tipos de proxy

Não coloque todos os ovos na mesma cesta. Use uma mistura de:

  • Datacenter – Velocidades mais rápidas. Risco de bloqueios devido ao uso intenso do raspador.
  • Residencial – Mais lento, mas parece mais “humano”. Disponibilidade limitada.
  • Móvel Esteira – Aparecem como usuários móveis. Muitos sites não oferecem suporte total para dispositivos móveis.

Encontrar o equilíbrio certo entre os tipos de proxy garante que você tenha ângulos cobertos caso um pool de proxy fique sobrecarregado ou bloqueado.

Desativar proxies com falha

Mesmo com rotação robusta, alguns proxies inevitavelmente começarão a falhar com bloqueios e captchas.

Desative temporariamente os proxies que retornam erros ou bloqueios. Isso lhes dá uma mudança para "refrescar" e redefine seu status com o site de destino.

Você pode testar novamente os proxies desativados periodicamente para ver se eles se recuperaram.

Adicionar atrasos

A inserção de atrasos aleatórios entre as solicitações ajuda a garantir que o tráfego de extração pareça mais humano e evita limites de taxa abusivos.

Minha abordagem típica é adicionar atrasos aleatórios de 1 a 3 segundos a cada 5 a 10 solicitações.

Você também pode detectar sinais de limitação, como desafios de captcha, e aumentar dinamicamente os atrasos.

Rotacionar países

Se você estiver direcionando sites específicos de um país, certifique-se de usar proxies realmente localizados nesse país.

Por exemplo, ao copiar um site focado em usuários do Reino Unido, certifico-me de alternar proxies residenciais e de datacenter localizados no Reino Unido.

A rotação baseada na geografia ajuda a se misturar como um usuário local fazendo solicitações.

Dica de especialista

"Um truque inteligente que recomendo é alterar ligeiramente o agente do usuário a cada rotação do proxy. Isso adiciona outra variável que impede que o site de destino crie facilmente um perfil e detecte seu raspador."

Seja criativo ao adicionar pequenos ajustes, como a rotação do User Agent, para mascarar ainda mais as impressões digitais do raspador.

Implementando rotação de proxy em Python

Agora que exploramos estratégias de rotação de proxy, vamos dar uma olhada em um exemplo de implementação do Python.

Primeiro definiremos uma lista de proxies disponíveis:

proxies = [
  ‘104.45.147.53:8080‘,
  ‘45.15.62.230:8123‘, 
  ‘177.36.45.82:3128‘,
  # etc
]

Em seguida, precisamos de lógica para realmente percorrer esta lista. Usaremos Python random biblioteca para escolher um proxy aleatório para cada solicitação:

import random

def get_random_proxy():
  return random.choice(proxies)

Para evitar escolher o mesmo proxy duas vezes, podemos rastrear o proxy usado anteriormente e randomizá-lo novamente até obtermos um novo:

last_proxy = None

def get_random_proxy():

  proxy = random.choice(proxies)  

  while proxy == last_proxy:
    proxy = random.choice(proxies)

  last_proxy = proxy

  return proxy 

Agora podemos passar o proxy rotacionado para o requests módulo:

import requests

# Rotate proxy
proxy = get_random_proxy() 

# Make request with rotated proxy  
requests.get(‘http://example.com‘, proxies={‘http‘: proxy, ‘https‘: proxy})

Isso nos dá uma configuração básica de rotação de proxy em apenas algumas linhas!

A seguir, vamos dar uma olhada em um rotador de proxy mais avançado que incorpora algumas práticas recomendadas…

import random
from time import sleep

# Proxy list
proxies = [
  {‘ip‘: ‘104.45.147.53:8080‘, ‘country‘: ‘US‘, ‘subnet‘: ‘147‘},
  {‘ip‘: ‘45.15.62.230:8123‘, ‘country‘: ‘CA‘, ‘subnet‘: ‘62‘},
  # etc
]

# Tracking variables
last_proxy = None
last_subnet = None
disabled_proxies = [] 

def get_proxy():

  # Remove disabled proxies
  global proxies 
  proxies = [p for p in proxies if p[‘ip‘] not in disabled_proxies]

  # Weight random selection 
  proxy_weights = []
  for proxy in proxies:
    if proxy[‘country‘] == ‘US‘:
      # Prefer US proxies
      weight = 100 
    else:
      # Lower weight for non-US
      weight = 50

    if proxy[‘subnet‘] == last_subnet:
      # Lower weight if same subnet
      weight -= 20

    # Apply weight    
    proxy_weights.extend([proxy]*weight)

  # Pick weighted random proxy
  proxy = random.choice(proxy_weights) 

  # Avoid immediate subnet repeat
  while proxy[‘subnet‘] == last_subnet:
    proxy = random.choice(proxy_weights)

  # Rotate subnet 
  last_subnet = proxy[‘subnet‘]

  # Optional delay
  sleep(1)

  return proxy[‘ip‘]

# Usage:

proxy = get_proxy()
try:
  response = requests.get(‘http://example.com‘, proxies={‘http‘: proxy, ‘https‘: proxy})
  # Success - do nothing
except:
  # Failure - disable proxy
  disabled_proxies.append(proxy) 

Isso nos dá um rotador mais robusto com:

  • Ponderação proxy
  • Remoção de proxies com falha
  • Rotação de sub-rede
  • Atraso entre solicitações

Existem muitas outras otimizações, como integrações com APIs de gerenciador de proxy, que podem melhorar ainda mais o desempenho.

Aproveitando APIs de proxy para rotação

Gerenciar a rotação de proxy por conta própria pode consumir muito tempo. As APIs de proxy abstraem o gerenciamento de proxy e facilitam a integração.

Algumas APIs de proxy notáveis ​​para verificar:

Luminati – A maior rede proxy paga com mais de 72 milhões de IPs. Ideal para operações de raspagem extremamente grandes. Custo mínimo em torno de US$ 500/mês.

oxilabs – Oferece 3 milhões de proxies em tipos residenciais, datacenter e móveis. Os preços começam em US$ 300/mês para 1 milhão de solicitações.

proxy inteligente – Especializada em proxies residenciais backconnect com 40 milhões de IPs. Os planos começam em US$ 75/mês para tráfego de 5 GB.

GeoSurf – Ótimo para segmentação de nicho com proxies em mais de 50 países. Os planos residenciais começam em US$ 290/mês.

Microfolhas – Orçamento de API de proxy residencial a partir de US$ 85/mês para 1 milhão de solicitações.

ScrapeOps – API de proxy inteligente com rotação integrada e resolução de CAPTCHA. Os planos começam em US$ 299/mês para 1 milhão de solicitações.

A principal vantagem das APIs é a integração simplificada e a obtenção de proxies instantaneamente, sem configurações demoradas. A maioria otimiza o uso de proxy nos bastidores.

Por exemplo, aqui está um script usando a API do proxy ScrapeOps para raspar um site:

import scrapeops

api = scrapeops.API()

for page in range(1, 100):
   url = f‘http://site.com/page/{page}‘
   html = api.get_html(url)
   # Parse html

A API abstrai todo o gerenciamento de proxy e fornece HTML limpo de qualquer página.

Para projetos de scraping maiores, aproveitar uma API de proxy dedicada pode economizar muito tempo de desenvolvimento em comparação com o manuseio de proxies por conta própria.

Considerações Finais

Os proxies são obrigatórios para qualquer operação séria de web scraping. Simplificando – sem proxies, sem raspagem.

Certifique-se de usar vários proxies e implementar uma estratégia de rotação sólida, como round robin, desempenho ponderado ou aleatório.

Siga as práticas recomendadas, como rotação de sub-redes, desabilitação de proxies com falha, adição de atrasos e mistura de tipos de proxy.

A rotação de proxy cuidadosa e cuidadosa permitirá que você trabalhe em grande escala sem se preocupar com blocos de IP ou captchas.

Espero que este guia forneça uma visão geral abrangente das técnicas ideais para rotação de proxies em seus projetos de web scraping. Deixe-me saber se você tiver alguma outra dica de rotação de proxy!

Tags:

Junte-se à conversa

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *