WebScraping com Nodejs e Puppeteer (Chrome)

Coletando dados de uma página web e salvando as informações em json e xls (excel).

Matheus Sandrini Rossi
Matheus Rossi
4 min readApr 8, 2020

--

Caso você não tenha lido, já temos outro post bem similar a este, o qual inclusive recomendo a leitura, porém conforme descrito nele, seu desenvolvimento foi baseado em tecnologias depreciadas / não recomendadas, no caso PhantomJs e o próprio JQuery.

Por se tratar de uma tecnologia que não recebe mais atualizações e que possui limitações, por exemplo a própria versão do javascript (Apenas ES5) que pode ser utilizada, resolvi seguir meu próprio conselho do final daquela publicação e testar o puppeteer como ferramenta para webscraping.

Já antecipando o a conclusão deste post, é uma ótima alternativa.

Código fonte do projeto estará disponível em meu github. Link no final do post.

Conhecimentos Necessários

Para implementar o projeto, alguns conhecimento básicos se fazem necessários, dentre os quais:

  • NodeJs / Javascript (básico / intermediário)
  • Html / CSS (básico/intermediário)

Puppeteer

Grande parte do que você pode fazer manualmente no navegador, pode ser feito / automatizado utilizando o Puppeteer! Alguns exemplos abaixo:

  • Criar screenshots e PDFs de páginas.
  • Automatizar preenchimento de formulários, testes de UI, entradas via teclado, etc.
  • Criar um ambiente de testes atualizado e automatizado. Rodar seus testes diretamente na ultima versão do chrome, utilizando as ultimas features do JavaScript e do Chrome.
  • Testar extensões do Chrome.
  • Etc

Preparação do Projeto

Em um terminal, dentro da pasta onde o projeto será criado:

Preparação realizada, vamos realizar um teste inicial, para verificar se tudo está ok, conforme própria documentação do puppteer.

  • Dentro da pasta puppeteer_test, crie um arquivo chamado exemplo.js
  • Abra o arquivo e cole esta sequência de códigos

O que vamos fazer aqui, é navegar até a página example.com e tirar um screenshot da página, que será salva como example.png.

Acrescentei o parâmetro headless: false, para que o navegador seja aberto e seja possível visualiza-lo funcionando de forma automatizada.

Conforme podemos ver no vídeo a cima, executamos o script através do comando node ./scrapTest.js e visualizamos o screenshot na pasta do projeto.

Introdução a ferramenta realizada, é hora de por a mão na massa, e trabalharmos em algum projeto real.

Bibliotecas adicionais

Para atingirmos nossos objetivos, vamos necessitar de algumas bibliotecas adicionais, que terão as seguintes funcionalidades:

XLSX — Será responsável por pegar nossos dados, e gravar eles em uma planilha de excel, no formato .xlsb, que é um formato binário do excel, permitindo o armazenamento de uma quantidade significativa de dados, em comparação aos formatos tradicionais (xlsx, xls, csv ..)

Se você programa em nodejs, você certamente conhece esse biblioteca. O lodash nos dará funções que facilitarão o trabalho com os dados que serão extraídos do DOM, tornando a captura dos dados ainda mais simples de ser realizada.

Por ultimo e definitivamente não menos importante, esta biblioteca nos permite camuflar nosso puppeteer, fazendo com que ele seja interpretado como um navegador comum e não de testes automatizados, conforme o comportamento padrão da ferramenta.

Este pacote contornou um possível problema que teríamos na extração dos dados, que é o captcha do google.

Sim, por incrível que pareça ele conseguiu de algum modo burlar esse captcha, e tornar a extração dos códigos em massa possível e extremamente simples. Se é um erro de implementação do desenvolvedor da página ? Possivelmente …

Todos esses pacotes podem ser instalados via yarn ou npm, ou caso você opte por clonar meu repositório do github, apenas siga os procedimentos padrões.

O vídeo abaixo, demostra o webscraping funcionando na prática, onde através das estruturas html e css percorremos todos os dados e utilizamos o nodejs como linguagem para extração dos dados.

Link para o repositório do projeto:

That’s all folks!

Obrigado e até o próximo post

--

--

Matheus Sandrini Rossi
Matheus Rossi

Data Engineer, Especialista em Gestão da Qualidade,Engenharia de Produção e Engenharia de Dados. Estudante de Eng de Software e fotógrafo p/ hobby