Voltar ao blogue
A ciência da extração de dados da Web
Anda MiuțescuLast updated on Apr 10, 202613 min read

A lista definitiva de dicas e truques para web scraping

A lista definitiva de dicas e truques para web scraping

Embora a extração de dados da Web possa parecer fácil na prática, existem inúmeras armadilhas nas quais um programador inexperiente pode cair. Em vez de insistir até esgotar os proxies não bloqueados, atrevo-me a pensar que seria melhor extrair dados de forma inteligente, obter os dados necessários e sair sem nunca ser detetado.

A verdadeira questão é: como fazer isso? Como é que se obtém informação sem que o IP seja bloqueado, sem se deparar com CAPTCHAs, sem recuperar código JavaScript inútil e sem ter de ajustar incessantemente o código do scraper? Bem, não existe uma regra de ouro a seguir, mas existem boas práticas.

Preparámos doze dicas para si. Use-as e verá que todos os dados da Internet estão a apenas alguns cliques de distância.

1. Planeie antes de fazer o scraping

Tal como qualquer projeto, os trabalhos de web scraping tornam-se muito mais fáceis se definir uma estratégia clara antes mesmo de começar. Em primeiro lugar, por que precisa de dados? Pode parecer uma pergunta óbvia, mas a resposta é fundamental para determinar que informações deve recolher.

Em seguida, onde vai obter a informação? A ferramenta de scraping deve ser adequada aos sites que tem de visitar, pelo que examinar as suas fontes de dados o ajudará a criar ou adquirir o programa certo para o trabalho.

Pergunta três: como vai utilizar as informações recolhidas? Pode processá-las você mesmo, utilizar software ou até mesmo enviá-las para um fluxo de trabalho complexo. A resposta será o seu primeiro passo para decidir a estrutura e o formato de ficheiro dos dados recolhidos.

Há muitas outras questões e ideias que terá de resolver, a maioria das quais depende fortemente do que pretende alcançar. Uma coisa é certa: «medir duas vezes, cortar uma vez» aplica-se perfeitamente ao web scraping.

2. Aja de forma mais humana

Se quiser saber se um visitante de um site é um humano ou um bot, basta observar a forma como se comporta. Os bots movem-se à velocidade da luz e nunca interagem com a página, a menos que recebam instruções em contrário. Como resultado, são fáceis de identificar e bloquear.

Para ajudar o scraper a evitar a deteção, tem de lhe ensinar a agir mais como um visitante normal, um humano. O bom aqui é que as pessoas agem de todas as formas possíveis, por isso tem muita liberdade ao programar. Aqui estão algumas ações que sugerimos que adicione:

  • Adicione intervalos aleatórios de inatividade, como se um humano estivesse a ler o conteúdo da página. Um atraso de 5 a 10 segundos funciona muito bem.
  • Navegue pelas páginas num padrão em árvore. Se estiver a fazer scraping de várias páginas secundárias, passe sempre pela página principal ao avançar. Isto imitará uma pessoa a clicar numa página, depois a voltar atrás, a clicar na seguinte e assim por diante.
  • Faça com que o bot clique em coisas aleatórias de vez em quando. Isso é algo que todas as pessoas fazem e não só eu, certo?

De qualquer forma, a razão pela qual o seu bot tem de agir de uma determinada forma é porque o site pode estar a monitorizar e a registar a sua atividade. Mas e se o site não conseguisse acompanhar o bot? Leia o ponto seguinte para obter a sua resposta.

3. Alterne os seus proxies

Usar um proxy para garantir que o seu IP real não seja bloqueado é algo óbvio. O mesmo se aplica a obter um proxy de uma localização geográfica específica para aceder a conteúdos com restrições regionais. Mas os proxies podem fazer muito mais por si com as ferramentas certas!

Neste momento, a ferramenta de que precisa é um servidor para alternar o seu conjunto de proxies. Com ele, cada pedido que enviar é atribuído a um IP aleatório dentro do conjunto e enviado para o destino. Desta forma, pode rastrear um site tanto quanto quiser e cada pedido parecerá vir de um local e de uma pessoa diferentes.

Além disso, os proxies rotativos garantem que, se um IP for bloqueado, não ficará preso até alterar manualmente os proxies. Uma solicitação pode falhar, mas as outras não. Uma boa ferramenta também tentará novamente quaisquer tentativas falhadas; por exemplo, a WebScrapingAPI repete chamadas de API falhadas para garantir que não haja lacunas na sua base de dados.

Para obter os melhores resultados possíveis, convém utilizar proxies rotativos residenciais. Os IPs residenciais são os menos suscetíveis de serem detetados ou bloqueados e, ao rodá-los, torna o scraper ainda mais difícil de detetar. Tenha em mente que isto pode ser um exagero, por vezes. Se não estiver a enfrentar contramedidas anti-bot difíceis, os proxies rotativos de centro de dados podem fazer o trabalho igualmente bem e por um preço mais baixo.

4. Use um navegador headless

Um navegador headless é igual a um normal, exceto que não possui uma interface gráfica de utilizador. Para navegar na web com um, terá de utilizar uma interface de linha de comando.

Deve definitivamente adicionar um navegador sem interface gráfica ao seu fluxo de trabalho de web scraping, e os sites dinâmicos são a razão para isso. Muitos sites hoje em dia usam Javascript para oferecer uma melhor experiência de utilizador aos visitantes. O exemplo mais simples disso é redimensionar elementos da página para se adaptarem bem à resolução do ecrã do visitante.

O problema é que o precioso HTML está oculto por trás do código Javascript. Para aceder a ele, terá de executar o JS. Um scraper comum não consegue fazer isso, mas todos os navegadores conseguem.

Assim, sem um ambiente de navegador, a ferramenta de scraping não será capaz de recolher dados de qualquer site que utilize Javascript, o que é a maioria neste momento, ou pelo menos a maioria dos que importam.

Se estiver a criar um scraper do zero, recomendo que experimente o Puppeteer; aqui estão alguns detalhes sobre o que faz e como usá-lo.

5. Alterne os cabeçalhos User-Agent

User-Agent é o nome de um cabeçalho de pedido HTTP que indica ao site que está a visitar qual o navegador e o sistema operativo que está a utilizar. De certa forma, os sites utilizam este cabeçalho para saber mais sobre quem os está a visitar. É ótimo para análise e, por acaso, é útil para detetar bots.

Eis como pode ser uma string de user-agent:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

Existem três cenários principais que deve evitar:

  • Não ter qualquer agente de utilizador. A maioria dos scrapers não utiliza um, o que é suspeito e uma boa forma de anunciar que são bots. Certifique-se de que está a enviar cabeçalhos com aspeto normal em cada pedido.
  • Ter um user-agent desatualizado. A cada nova atualização, os navegadores geralmente alteram o cabeçalho. Portanto, se a sua lista contiver um user-agent para o Mozilla, mas este tiver sido atualizado e alterado, o site que visitar poderá perceber que algo está errado.
  • Usar o mesmo cabeçalho para cada pedido. Pode usar o user-agent normal do seu navegador real, mas isso resultará em centenas de pedidos diferentes, provenientes de IPs diferentes com exatamente a mesma impressão digital. É uma grande pista.

Aqui fica uma dica extra sobre o assunto: experimente utilizar o user-agent do Googlebot. É claro que qualquer site quer ser indexado, por isso deixam os rastreadores do Google fazerem o seu trabalho. Mas atenção: os bots deles também têm IPs e comportamentos específicos, pelo que o user-agent por si só não é garantia de sucesso.

6. Adicione funcionalidades anti-CAPTCHA

Se estiver a fazer scraping corretamente, não deverá deparar-se com CAPTCHAs, exceto em casos muito raros. Ainda assim, se isso acontecer, é um grande incómodo, pois pode parar o seu scraper ou fazer com que este devolva dados falsos (o código da página CAPTCHA).

O plano de batalha anti-CAPTCHA tem duas partes: prevenção e tratamento. Deve concentrar-se principalmente na prevenção, pois é de longe a opção mais eficiente. Eis o que deve fazer:

  • Utilize proxies para fazer parecer que os seus pedidos provêm de fontes diferentes.
  • Altere os cabeçalhos das suas solicitações (especialmente o user-agent). Caso contrário, ainda poderá ser detetado, apesar de utilizar vários IPs.
  • Execute o código Javascript da página. Um navegador sem interface gráfica é a sua melhor aposta. Muitos sites lançam CAPTCHAs a qualquer visitante que não o faça, uma vez que se trata de um comportamento invulgar.

Portanto, essencialmente, use as dicas n.º 3, n.º 4 e n.º 5.

Se o scraper continuar a ter problemas, vai precisar de um solucionador de CAPTCHA. Ao escolher uma ferramenta de web scraping, certifique-se de que a sua escolha tem esta funcionalidade integrada. Caso contrário, é tecnicamente possível integrar um solucionador por conta própria, mas isso implica codificação adicional e tempo perdido. Para que saiba, a nossa API tem esta funcionalidade, não que encontre muitos CAPTCHAs, para começar.

7. Crie uma lista de URLs

Quando iniciar uma tarefa de scraping, provavelmente irá compilar uma lista de URLs com informações valiosas. Eis uma ideia: em vez de enviar apenas as URLs para o scraper, mantenha uma lista e marque todos os links que já rastreou. Para maior clareza, também pode manter os dados extraídos junto com a URL.

A razão por trás disto é simples: se o seu computador falhar ou ocorrer algum outro evento inesperado, continuará a saber quais os dados que já possui, evitando um re-scraping inútil.

O nosso conselho é escrever um script para manter um registo da extração de dados. Atualizar a lista manualmente implica muito trabalho repetitivo e, de qualquer forma, não conseguirá acompanhar o bot.

8. Aprenda as estruturas das páginas

Recolher mais dados leva mais tempo, naturalmente. Assim, uma forma de aumentar a eficiência é identificar exatamente quais as informações que o scraper deve recolher. Fácil na teoria, mas cada site e página web é único. Para reduzir a sobrecarga e poupar tempo, tem de aprender algumas coisas sobre como as suas páginas-alvo estão estruturadas.

Eis como o faz:

  • Vá até à página;
  • Clique com o botão direito do rato no texto que deseja e selecione «Inspecionar Elemento»;
  • Observe como essa informação está aninhada, em que classes se encontra e sob que tag;
  • Procure padrões estruturais entre outras páginas de interesse. É provável que consiga criar um script que recolha toda a informação necessária de todo o site.

Depois de seguir estes passos, será muito mais fácil extrair apenas os detalhes de que precisa. A vantagem é que já não terá de lidar com HTML irrelevante a sobrecarregar os seus documentos.

Compreender o layout é especialmente útil para extrair informações sobre produtos. As páginas de produtos no mesmo site terão todas uma estrutura semelhante, se não idêntica. Descubra a lógica e poderá extrair e analisar muito mais rapidamente.

9. Adicione um intervalo entre os pedidos

O objetivo de um web scraper é recolher dados mais rapidamente do que um ser humano conseguiria. Compreendemos isso, mas a velocidade tem um efeito secundário indesejado: torna evidente que as solicitações estão a ser enviadas por um bot.

Lembre-se do que dissemos sobre agir como um visitante normal: se o scraper se destacar, é muito mais provável que seja bloqueado. Mas não se preocupe, basta adicionar atrasos aleatórios ao usar o mesmo IP para várias visitas simultâneas ou sucessivas.

Lembre-se: faça isto ao utilizar o mesmo proxy. Se estiver a alterar o IP e os cabeçalhos após cada pedido, o atraso não deverá ser necessário. Se estiver conectado com um IP, no entanto, deve manter esse mesmo IP, o que significa que também precisará dos atrasos.

Certifique-se de que o temporizador é ligeiramente diferente, para que os atrasos sejam aleatórios. Algo entre 5 e 10 segundos deve funcionar bem.

10. Armazene páginas importantes em cache

Em alguns casos, vai querer revisitar páginas que já tinha extraído anteriormente para obter mais alguma informação. Em vez de fazer isso, guarde a página em cache na primeira visita e já terá todos os dados guardados.

Mesmo com o web scraper mais avançado, ainda há a possibilidade de o bot não conseguir os dados à primeira tentativa e, mesmo que consiga, estaria a desperdiçar esforço. Basta recolher todo o HTML de uma só vez e, depois, poderá extrair qualquer informação de que necessite da versão guardada.

Por exemplo, pode armazenar em cache uma página de produto para que esteja sempre à mão. Se precisar das especificações do produto hoje, mas amanhã quiser saber o preço, os dados já estarão recolhidos, à espera de serem processados.

Mas tenha em atenção que isto funciona para informações estáticas! Se quiseres preços de ações, terás de continuar a extrair dados atualizados, uma vez que a versão em cache ficará desatualizada rapidamente.

11. Tenha cuidado ao iniciar sessão

Os dados de que precisa podem estar escondidos atrás de uma página de login. Vêm-me à cabeça as plataformas de redes sociais. Claro, pode obter alguns fragmentos de conteúdo sem uma conta, mas é mais trabalhoso e pode querer algo que só é visível se fizer parte de um grupo ou de uma lista de amigos. Em suma, pode precisar de iniciar sessão e isso traz alguns problemas.

Todos os utilizadores de um site com uma conta têm de concordar com os seus Termos de Serviço. Nesses termos, pode haver uma cláusula que proíba especificamente a utilização de bots, ferramentas automatizadas ou web scrapers. Neste caso, a extração de dados seria claramente contra as regras com as quais o utilizador concordou.

Outro ponto a ter em conta é que, embora os sites possam não estar extremamente atentos aos visitantes não registados, prestam mais atenção aos cookies enviados por utilizadores registados. Assim, essencialmente, haverá mais olhos postos no seu bot. Um comportamento de bot óbvio ou cookies reveladores são ainda mais suscetíveis de fazer com que o seu scraper seja bloqueado.

O que deve fazer:

  • Leia atentamente os Termos de Serviço e certifique-se de que não os está a infringir.
  • Certifique-se de que está a seguir todas as outras dicas deste artigo, especialmente as relativas a proxies, comportamento humano, renderização JS e cabeçalhos de pedidos.

12. Evite causar danos ao site

A maioria dos administradores web não gosta de ter scrapers nos seus sites. Para alguns, os bots são um incómodo menor; para outros, são um grande perigo. A verdade é que hackers e outros malfeitores usam bots para causar problemas e danos, como derrubar sites ou tentar roubar dados confidenciais.

Mesmo que as suas intenções sejam totalmente amigáveis, pode acidentalmente causar problemas. Uma enxurrada de pedidos simultâneos pode derrubar o servidor, por isso, eis algumas boas práticas para garantir que não deixa o caos no seu rasto:

  • Reduza o número de pedidos para evitar que todo o site fique inoperacional;
  • Leia o ficheiro Robots.txt, que deve explicar quais as ações que os bots estão autorizados a realizar. Não é um documento juridicamente vinculativo, mas expressa os desejos do proprietário do site.
  • Tenha cuidado com a forma como utiliza os dados extraídos. Pegar em conteúdo e republicá-lo, por exemplo, é prejudicial e ilegal, uma vez que esse conteúdo está protegido pela lei de direitos de autor.
  • Sempre que possível, peça permissão ao proprietário para recolher informações do site.

Através de ações amigáveis e éticas, pode fazer a sua parte para garantir que os bots sejam vistos como a ferramenta útil que são, em vez de uma espécie de saqueadores digitais.

Dica extra: escolha a ferramenta de web scraping certa

Não existe uma fórmula perfeita para o web scraping, mas há fatores a ter em conta que podem levar aos melhores resultados no momento certo. Este artigo foi elaborado para abordar todas as preocupações, todas as regras escritas ou não escritas e todas as melhores práticas existentes. Uma API ajudará os muitos utilizadores diários de scraping, e é precisamente por isso que o nosso primeiro truque será sempre a automatização.

Faça o scraping com sabedoria e desfrute dos resultados do seu trabalho com 1000 chamadas gratuitas da nossa parte!

Embora algumas das dicas mencionadas acima tenham a ver com a forma como utiliza a ferramenta de scraping, muitas podem ser integradas e automatizadas pelo próprio software, permitindo-lhe concentrar-se nas suas próprias tarefas e objetivos. É por isso que achamos que escolher o programa certo é tão importante quanto todas as dicas que discutimos, se não mais.

Sinceramente, acho que a WebScrapingAPI é uma excelente opção, especialmente porque pode experimentar a API com um plano gratuito e ver por si mesmo como ela funciona antes de investir qualquer dinheiro.

Se quiseres dar uma vista de olhos, escrevemos um guia de compra abrangente com 20 ferramentas de web scraping, por isso não deixes de o consultar!

Sobre o autor
Anda Miuțescu, Redator de conteúdos técnicos @ WebScrapingAPI
Anda MiuțescuRedator de conteúdos técnicos

Anda Miuțescu é redatora de conteúdos técnicos na WebScrapingAPI, criando conteúdos claros e úteis que ajudam os programadores a compreender o produto e as suas funcionalidades.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.