Ir para o conteúdo

Código de status 503: o inimigo do web scraper (e como derrotá-lo)

Se você já passou algum tempo na web, sem dúvida encontrou o temido erro “503 Serviço indisponível”. Para o usuário médio da Internet, é um pequeno aborrecimento. Mas para web scrapers, pode ser um grande obstáculo para coletar os dados de que precisam.

De acordo com dados do Pingdom, os erros 503 são o segundo código de status 5xx mais comum, respondendo por quase 25% de todas as respostas de erro do servidor. E em uma pesquisa com mais de 1,000 desenvolvedores, 38% disseram que solucionar problemas e resolver erros 503 era uma das partes mais frustrantes de seu trabalho.

Como um web scraper profissional, você não pode permitir que erros 503 atrapalhem seus projetos. Neste guia detalhado, detalharemos exatamente o que significam os códigos de status 503, o que os causa e, o mais importante, estratégias comprovadas para evitá-los e superá-los. Vamos mergulhar!

Desconstruindo o erro 503: uma visão geral

Antes de falarmos sobre como evitar erros 503, é importante entender o que eles realmente significam.

Um código de status 503 é um código de status de resposta HTTP que indica que o servidor está temporariamente incapaz de lidar com a solicitação. Isso geralmente acontece porque o servidor está sobrecarregado ou fora do ar para manutenção.

Oficialmente, a descrição do código de status 503 é “Serviço indisponível”. Freqüentemente, você verá isso exibido em páginas de erro junto com mensagens como:

  • "O servidor está temporariamente impossibilitado de atender sua solicitação devido a tempo de inatividade para manutenção ou problemas de capacidade. Tente novamente mais tarde."
  • "O serviço não está disponível. Tente novamente mais tarde."
  • "Este site está recebendo mais tráfego do que o normal. Aguarde um pouco, estaremos de volta em breve!"

Uma coisa importante a observar é que um erro 503 significa especificamente que o próprio servidor está funcionando corretamente, mas não consegue lidar com a solicitação atual por algum motivo. Isso é diferente de outros erros 5xx que indicam falha real do servidor:

Código de statusNomeDescrição
500Internal Server ErrorErro genérico indicando uma condição inesperada no servidor
501Não implementadoO servidor não oferece suporte à funcionalidade para atender à solicitação
502Bad GatewayO servidor atuando como proxy/gateway recebeu uma resposta inválida da origem
503Serviço não disponívelO servidor está sobrecarregado ou inoperante para manutenção
504Timeout gatewayO servidor gateway não recebeu resposta do servidor de origem a tempo

Como você pode ver, os erros 503 caem em uma área cinzenta. O servidor não está quebrado por si só, apenas não está disponível para responder naquele momento. Esta é uma distinção fundamental à qual voltaremos mais tarde.

Dissecando as causas dos erros 503

Então, o que realmente faz com que um servidor retorne um erro 503? Existem alguns cenários comuns:

  1. Recursos de servidor sobrecarregados
    Cada servidor tem recursos finitos – CPU, memória, E/S de disco, largura de banda da rede, etc. Quando o volume de solicitações recebidas excede o que esses recursos podem suportar, o servidor pode começar a recusar novas conexões para evitar travar totalmente. Ele responderá com um 503 para sinalizar que está muito ocupado para atender a solicitação no momento.

  2. Manutenção agendada
    Muitos sites têm janelas de manutenção periódica onde implantam atualizações, executam backups ou realizam outras manutenções. Durante esse período, o site poderá ficar parcial ou totalmente indisponível. As solicitações falharão com 503 até que a manutenção seja concluída e o servidor reiniciado.

  3. Mitigação de Ataque DDoS
    Quando um site é alvo de um ataque de negação de serviço distribuída (DDoS), ele pode ativar regras de bloqueio ou limitação de taxa de emergência para afastar o tráfego malicioso. Isso pode fazer com que solicitações legítimas sejam apanhadas no fogo cruzado e rejeitadas com erros 503.

  4. Blocos de firewall de aplicativos da Web
    Muitos sites encaminham solicitações por meio de um Web Application Firewall (WAF) para proteção contra ataques comuns, como injeção de SQL e scripts entre sites. Se uma solicitação parecer suspeita, o WAF poderá bloqueá-la e retornar um erro 503.

  5. CAPTCHAs de serviço anti-bot
    Alguns sites usam CAPTCHAs e outros testes de resposta a desafios para tentar filtrar bots disfarçados de humanos. Web scrapers automatizados podem ser pegos por eles, resultando em erros 503.

De acordo com o relatório Bad Bot de 2022 da Imperva, 27.7% de todo o tráfego de sites vem de bots e 30.2% desse tráfego de bots é malicioso. Não é de admirar que mais sites do que nunca estejam sendo reprimidos, para desgosto dos web scrapers.

Determinando a causa raiz dos SEUS erros 503

Quando o seu web scraper começar a retornar apenas erros 503, não entre em pânico. O primeiro passo é identificar a causa subjacente. Existem duas possibilidades principais:

  1. O site está completamente fora do ar ou indisponível para todos
  2. O site está disponível, mas bloqueou seu scraper específico

Para descobrir com qual cenário você está lidando, tente navegar até o URL que está retornando erros 503 em um navegador normal ou de um proxy em uma região geográfica diferente. Se você conseguir acessar o site normalmente, isso significa que os erros 503 são específicos do seu endereço IP de coleta.

Você também pode usar ferramentas de monitoramento de sites de terceiros para verificar o status geral do site:

  • DownDetector rastreia problemas relatados por usuários em sites populares
  • UptimeRobot e Pingdom monitorarão uma URL de vários locais globais
  • IsItDownRightNow e CurrentDown fornecem verificações rápidas de status

Se um deles mostrar o site fora do ar para todos, você terá que esperar até que eles resolvam o problema. Nenhuma quantidade de codificação inteligente pode destruir um site que está completamente offline.

Mas se o site parecer bom para o resto do mundo, isso significa que você precisará se concentrar em fazer com que seu raspador imite melhor um usuário normal.

Táticas testadas em batalha para evitar erros 503

Neste ponto, você determinou que as solicitações do seu scraper estão sendo destacadas e bloqueadas com erros 503. O que você pode fazer? Aqui estão algumas técnicas comprovadas para fazer com que seu web scraper volte às boas graças do site:

  1. Diminua a velocidade
    O motivo mais comum pelo qual os sites bloqueiam scrapers é porque eles estão fazendo muitas solicitações muito rapidamente. Martelar um site mais rápido do que qualquer ser humano poderia navegar nele é extremamente suspeito. Sua primeira linha de defesa deve ser limitar seus scrapers para solicitar apenas uma página a cada 10-15 segundos, no máximo. Considere também adicionar atrasos aleatórios entre as solicitações para fazer com que o tempo pareça mais orgânico.

  2. Distribua a carga
    Mesmo com atrasos adicionais, fazer centenas ou milhares de solicitações a partir de um único endereço IP em um curto período ainda é um grande sinal de alerta. Distribuir as solicitações por um conjunto de proxies rotativos faz com que seu tráfego pareça vir de muitos usuários legítimos diferentes em locais diferentes. Usar proxies de diferentes sub-redes e até mesmo de diferentes provedores aumenta ainda mais a camuflagem.

  3. Misture-se com os humanos
    Tudo sobre as solicitações do seu scraper deve imitar um usuário normal com um navegador normal. Isso significa definir um cabeçalho User-Agent comum que corresponda aos visitantes típicos do site. Também significa incluir cabeçalhos normais como Accept-Language e Referer. Certifique-se de definir um pote de biscoitos para armazenar e enviar de volta todos os cookies que o site emitir.

  4. Evite armadilhas comuns para bots
    Evite padrões de rastreamento que são extremamente ineficientes para humanos, mas comuns para bots, como rastrear rapidamente todos os links de todas as páginas. Em vez disso, organize seus scrapers em torno de uma fila central de páginas de destino. Respeite as regras do robots.txt que dizem aos bots bem comportados para se manterem afastados. E não raspe indefinidamente o mesmo punhado de páginas.

Recuperando-se de 503s inevitáveis

Às vezes, mesmo com todas as precauções corretas, seu raspador ainda encontrará um erro 503. Talvez o site tenha sofrido um aumento repentino de tráfego legítimo ou talvez algumas de suas solicitações tenham sido roteadas por acaso por meio de um servidor sobrecarregado.

Quando uma solicitação falhar, não tente novamente imediatamente. Um bombardeio de novas tentativas é um grande sinal de bot e provavelmente levará ao banimento do seu IP. Em vez disso, use a espera exponencial:

  1. Aguarde 1 segundo e tente novamente
  2. Se falhar novamente, espere 2 segundos e tente novamente
  3. Se falhar novamente, espere 4 segundos e tente novamente
  4. Se falhar novamente, espere 8 segundos e tente novamente
  5. E assim por diante, até um máximo de 5 tentativas

Aqui está uma função Python que implementa isso:

import time
import random

def retry_with_exp_backoff(func, max_retries=5):
  for n in range(max_retries):
    try:
      return func()
    except Exception:
      if n == max_retries - 1:
        raise
      sleep_seconds = 2 ** n + random.uniform(0, 1)  
      time.sleep(sleep_seconds)

O atraso fracionário aleatório ajuda a escalonar as novas tentativas para que você não tenha um monte de scrapers tentando novamente exatamente no mesmo segundo.

Se você ainda obtiver 503 após 5 tentativas, é melhor seguir em frente por enquanto e tentar novamente mais tarde. Talvez acesse uma seção diferente do site por um tempo ou apenas pause totalmente o raspador. Você não quer parecer muito persistente.

A opção nuclear: usando um navegador sem cabeça

Para sites com defesas anti-bot particularmente agressivas, às vezes a única maneira de evitar erros 503 é entrar no modo totalmente furtivo com um navegador sem cabeça.

Ferramentas como Puppeteer e Playwright permitem controlar um navegador real de forma programática. Ao contrário do Selenium, eles são projetados para funcionar sem controle por padrão e possuem truques adicionais para emular o comportamento humano:

  • Gerando movimentos e cliques falsos do mouse
  • Randomizando o tamanho da janela de visualização e os parâmetros do dispositivo
  • Interceptando e modificando solicitações/respostas

É o mais próximo que você pode chegar de tornar seu raspador indistinguível de um usuário real. A desvantagem é que consome muitos recursos em comparação com o envio de solicitações simples. Mas para dados de missão crítica em sites hostis a bots, vale a pena compensar.

Eu seria negligente se não reconhecesse as possíveis implicações legais e éticas de contornar as contramedidas de bot de um site.

Em geral, os tribunais decidiram que a coleta de informações acessíveis ao público não viola a Lei de Fraude e Abuso de Computadores. No caso histórico de 2019, HiQ Labs v. LinkedIn, o Tribunal de Apelações do 9º Circuito dos EUA considerou que a extração de perfis públicos do LinkedIn não era “acesso não autorizado”, uma vez que esses dados não estavam por trás de um login.

No entanto, algumas empresas apresentaram com sucesso reclamações de violação de direitos autorais, invasão de bens móveis, quebra de contrato e outras causas de ação contra web scrapers. Ignorar restrições técnicas para acessar um site após receber uma carta de cessação e desistência é especialmente arriscado do ponto de vista jurídico.

Há também o argumento de que contornar intencionalmente um erro de limite de taxa 503 para continuar martelando um site vai contra as normas sociais da Internet e desperdiça os recursos do proprietário do site. Só porque você pode nem sempre significa que deveria.

Como um web scraper ético, você deve sempre tentar seguir as regras do robots.txt, honrar o contrato implícito dos Termos de Serviço de um site e evitar sobrecarregar indevidamente seus servidores. Às vezes, é melhor tentar trabalhar diretamente com os proprietários do site para obter os dados necessários por meio de meios aprovados, como APIs e despejos de dados.

O futuro do web scraping versus defesas anti-bot

O jogo de gato e rato entre web scrapers e operadores de sites que tentam bloqueá-los não mostra sinais de desaceleração.

À medida que mais e mais empresas percebem o valor dos dados da web, os incentivos para construir scrapers sofisticados nunca foram tão grandes. Ao mesmo tempo, muitos sites estão adotando medidas anti-bots mais rigorosas para se protegerem de atores mal-intencionados.

Modelos de aprendizado de máquina estão sendo usados ​​em ambos os lados – por scrapers para aprender padrões de navegação humana e por sites para aprender padrões de solicitação semelhantes aos de bots. Provavelmente veremos essa corrida armamentista de IA esquentar, com bots tentando imitar humanos e detectores de bot tentando expor seus disfarces.

O cenário jurídico em torno do web scraping também ainda está evoluindo, com muitas questões em aberto sobre onde o scraping ultrapassa os limites do acesso não autorizado. Temos certeza de que veremos mais decisões da CFAA, como HiQ Labs v. LinkedIn, que esperamos fornecer mais clareza à comunidade de web scraping.

Por enquanto, o erro 503 continua sendo a ruína da existência de muitos scrapers. Mas ao entender o que isso significa, usando técnicas inteligentes de otimização e pegando emprestados alguns truques de bots mais sorrateiros, você pode superá-lo e manter o fluxo de dados.

Principais vantagens para evitar erros 503

Cobrimos muito neste mergulho profundo nos erros 503 Serviço indisponível. Aqui estão os pontos principais a serem lembrados:

  1. Um erro 503 significa que o servidor do site está funcionando corretamente, mas está sobrecarregado ou indisponível para atender sua solicitação naquele momento.

  2. Sempre determine se o 503 é apenas para você ou para todo o site antes de continuar o diagnóstico.

  3. As causas mais comuns de erros 503 são muitas solicitações muito rápidas, manutenção do servidor, proteção DDoS, regras de firewall de aplicativos da web e CAPTCHAs anti-bot.

  4. Adicionar atrasos, usar rotação de proxy, falsificar cabeçalhos de solicitação semelhantes aos humanos e padrões variados de rastreamento podem ajudar a manter seu raspador sob o radar.

  5. Tente novamente solicitações com falha com espera exponencial para lidar com 503s temporários sem parecer muito com um bot.

  6. Navegadores sem cabeça como o Puppeteer e o Playwright são a última linha de defesa contra os sistemas anti-bot mais sofisticados.

  7. Esteja ciente da potencial área legal cinzenta em torno de contornar erros 503 e termos de serviço.

  8. A corrida armamentista tecnológica entre web scrapers e medidas anti-bots só vai acelerar.

Seguindo essas recomendações e exercendo alguma moderação e bom senso, você pode superar o erro 503 e obter os dados necessários para potencializar seus aplicativos. Feliz raspagem!

Junte-se à conversa

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