Se você já precisou desenvolver alguma aplicação web, sabe que o Web Scraping pode ser muito útil, não há dúvidas. Mas o que pouco se fala é como pode ser difícil de realizá-lo, principalmente quando os sites mais populares tentam impedir ativamente o Web Scraping usando uma variedade de técnicas.
Algumas dessas técnicas já são velhas conhecidas dos Devs, como a detecção de IP, verificação HTTP, os clássicos CAPTCHAs, diferentes verificações em javascript e muitas outras. Se existe alguém tentando fazer um scraper, vai existir alguém do outro lado para tentar evitá-lo das mais diversas formas possíveis.
No entanto, a raspagem de dados pode ser muito útil especialmente no setor B2B. Por exemplo, raspar dados do LinkedIn pode ser muito vantajoso já que a plataforma está repleta de executivos e funcionários de negócios de alto nível que compõem o público-alvo em quase todos os mercados B2B.
Por isso, neste artigo resolvemos trazer algumas técnicas bastante efetivas para evitar os tão temidos bloqueios. Aqui vão algumas dica para seu scrape não cair em uma blacklist e ser bloqueado:
1. Rotação de IP
A principal forma que os sites detectam web scrapers é através do endereço IP. Portanto, a maior parte dos web scrapers que escapa sem ser bloqueada provavelmente está usando vários endereços IP diferentes alternadamente para evitar bloqueios.
Para evitar o envio de todas as suas solicitações pelo mesmo endereço IP, você pode usar um serviço de rotação de IP ou outros serviços de proxy para rotear suas solicitações por meio de uma série de endereços IP diferentes. Isso permitirá que você realize o web scraping na maioria dos sites sem problemas.
2. Defina um User Agent autêntico
Os User Agents são um tipo especial de header HTTP que informam ao site que você está visitando qual o navegador utilizado. Alguns sites examinarão os User Agents e bloquearão solicitações vindas de navegadores não reconhecidos.
A maioria dos web scrapers não se preocupa em configurar o User Agent e, portanto, são facilmente detectados por esta verificação relativamente simples. Portanto, lembre-se de definir um User Agent sempre.
Dica: você também pode definir seu User Agent para o Googlebot, já que a maioria dos sites deseja ser indexada pelo Google e, portanto, provavelmente deixarão o Googlebot em uma whitelist.
3. Estabeleça intervalos aleatórios entre as solicitações
Como você deve imaginar, é muito mais fácil detectar um web scraper que envia exatamente uma solicitação por segundo, 24 horas por dia, não é mesmo? Nenhuma pessoa real usaria um site dessa maneira, tornando esse padrão facilmente detectável.
Por isso, use intervalos aleatórios (entre 3 e 11 segundos, por exemplo) para criar um web scraper mais evasivo a bloqueios. Ademais, aja com parcimônia para evitar sobrecarregar o servidor web e criar um problemão não apenas para si, mas para toda a comunidade.
Uma dica é verificar o robots.txt do site (http://www.example.com/robots.txt). Na maioria das vezes eles terão uma linha com o parâmetro crawl-delay informando quantos segundos aguardar entre as solicitações enviadas ao site para que não haja problemas.
4. Defina um Referrer
O Referrer é um header de solicitação http que permite ao site saber de qual site você está chegando. Geralmente é uma boa ideia definir isso para que pareça que você está acessando o site através de tráfego de pesquisa. Para fazer isso utilizando o Google, por exemplo, é bem simples: “Referer”: “https://www.google.com/”
Você também pode fazer isso para sites em diferentes países, por exemplo, se estiver tentando fazer um scrape de um site no Brasil, use “https://www.google.com.br/” em vez de “https: //www.google.pt/”.
Dica: você consegue encontrar o tráfego de referência mais comum para qualquer site usando ferramentas como https://www.similarweb.com. Assim, sua solicitação parece ainda mais autêntica já que o tráfego é proveniente de um site do qual o webmaster esperaria durante o uso normal.
O equilíbrio entre a utilidade e o desafio
Web Scrapers são ferramentas muito úteis e poderosas, que podem ajudar desenvolvedores e negócios a criarem soluções incríveis. Contudo, sempre haverá um dilema entre a dificuldade de criá-los e mantê-los de forma confiável e consistente e a postura dos websites quanto a esta técnica.
Fato é que, muitas vezes, com APIs extremamente limitadas (ou em alguns casos até mesmo inexistentes) os scrapers têm um papel fundamental na criação de aplicações úteis para infinitas tarefas não apenas dos desenvolvedores, mas também do usuário final.
Por isso, também é muito importante avaliar se a dificuldade em manter um scrape rodando, constantemente brigando com restrições e bloqueios e rentável no médio e longo prazo para seu projeto. Os Web Scrapers podem ser nossos aliados, mas é preciso prestar atenção no equilíbrio.
Esperamos que você tenha aprendido algumas dicas e técnicas úteis para criar web scrapers em sites grandes sem ser colocado na lista negra ou ser completamente banido. Ainda que apenas configurar a rotação de IPs e os headers HTTP adequados deva ser mais do que suficiente para evitar esses tipos de problema na maioria dos casos, às vezes você terá que recorrer a técnicas mais avançadas, como usar um navegador headless ou realizar um scrape no cache do Google para obter os dados necessários para seu projeto. Isso, por um lado, pode tornar o projeto mais desafiador e gratificante tecnicamente, mas, por outro, pode gerar uma carga de trabalho ainda maior – especialmente se você estiver desenvolvendo, mantendo e testando tudo sozinho.
Como sempre, é importante respeitar os webmasters e outros usuários do site ao fazer o scraping. Dessa forma, se você começar a perceber que o site está lento ou que alguns problemas começaram a surgir por conta do scrape, precisará diminuir suas solicitações. Isso é especialmente importante ao realizar o web scraping em sites menores que podem não ter os mesmos recursos que grandes empresas têm quando se trata de hospedagem na web.
Se você tem ou desenvolveu algum web scraping recentemente e gostaria de compartilhar como foi a sua experiência ao tentar evitar a detecção, deixe seu comentário para que outros desenvolvedores possam ter ainda mais ideias e suporte na hora de criar seus próximos scrapers 🙂