Raspagem Dados Node Js

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 12

Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

HTML JAVASCRIPT CSS BACK-END SOFT SKILL EXTRAS MAIS CATEGORIAS

RASPAGEM DE DADOS COM NODE.JS

por Rennan Martini Rodrigues 12/08/2015

~ 5 min. / 920 palavras

Raspagem de dados, ou Web scraping, é uma técnica de extração de dados onde é possível
recuperar informações de websites.

Existem diversas maneiras de fazer raspagem de dados: pode ser feito manualmente copiando e
colando, utilizando uma ferramenta online, usando uma extensão para o navegador Google
Chrome (como o Webscrapper), etc. Neste artigo será mostrado um passo-a-passo de como
fazer raspagem de dados no site Portal da Transparência. O site Portal da Transparência é
mantido pelo Tribunal de Contas da União, órgão que fiscaliza as contas do governo. Informações
de gastos com aquisição e contratação de obras e compras governamentais, diárias pagas,
cartões de pagamento do Governo Federal, entre outras são exemplos que podem ser encontrado.

Para fazer a aplicação raspar dados, usaremos as seguintes ferramentas:

• Node.js

• Express

• Request – Para fazer chamadas HTTP

• Cheerio – Para acessar o DOM externo e extrair os dados

Con�guração
Primeiro devemos configurar as dependências necessárias no arquivo package.json:
17
Shares

1 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

{
{
"name": "node-scrap-govbr",
"repository": {
"type": "git",
"url": "git://github.com/rennan/node-scrap-govbr.git"
},
"version": "0.0.1",
"description": "Exemplo simples de raspagem de dados em um site do Governo
Federal Brasileiro com Node.js.",
"main": "server.js",
"author": "Rennan Martini ",
"license": "MIT",
"dependencies": {
"express": "latest",
"request": "latest",
"cheerio": "latest"
}
}

Com o arquivo package.json pronto, é só instalar as dependências com o comando


npm install .

Agora que as dependências foram instaladas, iremos definir o que deve ser criado. Neste exemplo,
iremos fazer uma requisição na página de Gastos Diretos por Órgão Executor. Nesta
página teremos acesso aos gastos que o governo teve em 2015, separado por Ministério. Uma vez
que tivermos acesso a estas informações, podemos escolher o que salvar em um arquivo JSON
no computador.

A aplicação
O resumo da raspagem de dados funcionará da seguinte forma:

1. Nossa app vai fazer uma requisição a URL que iremos raspar

2. A requisição irá capturar o HTML da página e fornecer ele para o nosso server

3. Pelo server, iremos acessar o DOM e extrair as informações especí�cas (no caso
a tabela de gastos)

4. Em seguida, nossa app vai criar um arquivo .json com os dados extraídos e salvar
17na pasta do projeto.
Shares

2 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

Toda a a estrutura lógica ficará em um arquivo server.js.

var express = require('express'),


fs = require('fs'),
request = require('request'),
cheerio = require('cheerio'),
app = express();

// Passo 1
app.get('/raspagem', function(req, res) {
...
})

app.listen('8081')
console.log('Executando raspagem de dados na porta 8081...');
exports = module.exports = app;

Fazendo a requisição
A requisição externa deve ser realizada dentro do escopo do método app.get() através da
função <b>request()</b> . O método request deve receber dois parâmetros: a url e o
callback . No parâmetro url colocamos a página do Portal da Transparência e no
callback iremos declarar três novos parâmetros: error , response e o html .

app.get('/raspagem', function(req, res) {


// Passo 2
url = 'https://www.portaldatransparencia.gov.br
/PortalComprasDiretasOEOrgaoSuperior.asp?Ano=2015&Valor=86726995548647&Pagina=1';
request(url, function(error, response, html) {
...
})
})

Acessando o DOM da URL externa

17
Shares

3 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

Inspecionamos o código-fonte para ver o seletor da tabela que iremos fazer a raspagem. O cheerio
é uma biblioteca que nos dá permissão de manipular facilmente o DOM dos elementos da url. Se
você já utilizou jQuery, está familiarizado com a estrutura dos seletores. Depois de encontrar o
seletor, iremos manipular os elementos filhos da div#listagem , no caso a tabela.

...
// Assegurar que não tenha erros para fazer a raspagem de dados com sucesso
if (!error) {
var $ = cheerio.load(html);

// Objeto que irá armazenar a tabela


var resultado = [];

// Passo 3
// Manipulando o seletor específico para montar nossa estrutura
// Escolhi não selecionar a primeira linha porque faz parte do header da tabela
$('#listagem tr:not(:first-child)').each(function(i) {
// Obtendo as propriedades da tabela.
// O método .trim() garante que irá remover espaço em branco
var codigo = $(this).find('td').eq(0).text().trim(),

17 orgao = $(this).find('td').eq(1).text().trim(),
Shares valorTotal = $(this).find('td').eq(2).text().trim();

4 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

// Inserindo os dados obtidos no nosso objeto


resultado.push({
codigo: codigo,
orgao: orgao,
total: valorTotal
});
});
}

Formatando e Extraindo
Nós armazenamos os dados extraídos em uma variável chamada resultado . Agora é
necessário colocar as mãos na API do NodeJS chamada Fyle System. Esta biblioteca nos dá
acesso pra várias coisas legais, dentre elas a possibilidade de escrever arquivos. No método
writeFile() passaremos dois parâmetros: o arquivo .json que será gerado e o objeto que será
exportado neste arquivo.

// Passo 4
fs.writeFile('resultado.json', JSON.stringify(resultado, null, 4), function(err) {
console.log('JSON escrito com sucesso! O arquivo está na raiz do projeto.')
})

Assim, quando executarmos o comando node server.js no terminal a nossa aplicação irá
fazer a raspagem na URL e gerar o arquivo resultado.json.

17
Shares

5 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

Validando
É sempre importante validar o que você está fazendo. Podemos verificar se o nosso arquivo .json é
válido com a ferramenta JSONLint:

Considerações �nais
17
Vimos neste exemplo que o processo de raspagem de dados pode ser bem simples, porém é uma
Shares

6 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

técnica poderosa que aliada a outros serviços é possível construir ótimas aplicações. O código
completo utilizado como exemplo neste post está versionado no GitHub do autor.

Porquê escolhi um site do governo

Decidi escolher um site do governo porquê trata-se de um Portal com todas informações
disponíveis ao cidadão, que por uma série de fatores acaba passando despercebido. É importante
evidenciar que o Governo incentiva o manuseio de suas informações com dados abertos. Para
se ter uma noção sobre esta iniciativa, existem diversos projetos que trabalham com os
dados governamentais, através de raspagem e bots automatizadores de tarefas. O DataBR, por
exemplo, é um conjunto de API’s que possibilita desenvolvedores, jornalistas, analistas e demais
interessados, trabalhar com dados governamentais brasileiros.

***

Espero que tenha aproveitado a leitura.

Leia mais aqui no Tableless:


• Configurando React Native no macOS Mojave

• Performance no scroll com IntersectionObserver

• NPM e a polêmica de segurança

• Crud com Node.js e MongoDB (Express + Mongoose) na KingHost

• Proteja seu código usando o Webpack

17
Shares

7 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

TAMBÉM EM TABLELESS

Números grandes As ferramentas do Flutter: porque Tabela


em JavaScript … desenvolvedor … você deveria … Refer

3 anos atrás • 1 come... 3 anos atrás • 3 come... 3 anos atrás • 6 come... 3 anos atr

Apresentação de um Ferramentas úteis Porque você deveria Tabela de


novo tipo de dado para otimizar o apostar nesta para selet
para números. fluxo de trabalho … tecnologia. CSS

17
Shares

8 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

5 Comentários Tableless 🔒 Disqus' Privacy Policy 


1 Entrar

 Favorite t Tweet f Compartilhar Ordenar por Mais recentes

Participe da discussão...

FAZER LOGIN COM


OU REGISTRE-SE NO DISQUS ?

Nome

Emperius • 2 anos atrás


Como o site do governo (citado) provavelmente não está mais
disponível, eu tentei com outro site e funcionou perfeitamente!
As possibilidades agora são IMENSAS! Excelente postagem.
△ ▽ • Responder • Compartilhar ›

Ivens Joris • 3 anos atrás


Pq ele utiliza o express?
△ ▽ • Responder • Compartilhar ›

Emerson Santos • 3 anos atrás


Top demais, direto ao ponto...
△ ▽ • Responder • Compartilhar ›

Pedro Ronconi • 4 anos atrás


Muito bom artigo!
△ ▽ • Responder • Compartilhar ›

Avatar
Esse comentário foi apagado.

Pedro Ronconi > Guest • 4 anos atrás


está sobrando duas chave...
△ ▽ • Responder • Compartilhar ›

✉ Inscreva- d Adicione o Disqus no seu siteAdicionar ⚠ Do Not Sell My


se DisqusAdicionar Data

17
Shares

9 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

Você vai gostar de ler:


Configurando React Native no
macOS Mojave

Performance no scroll com


IntersectionObserver

NPM e a polêmica de segurança

Crud com Node.js e MongoDB


(Express + Mongoose) na
KingHost

17
Shares

10 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

Proteja seu código usando o


Webpack

Categorias
tecnologia-e-tendências (315)

geral (297)

artigos (290)

técnicas-e-práticas (269)

javascript (264)

código (214)

browsers (206)

html (191)

css (183)

mercado (121)

SOBRE
SOBRE O TABLELESS

17 CONTATO
Shares

11 of 12 06/11/2021 10:17
Raspagem de dados com Node.js - Tableless - W... https://tableless.com.br/raspagem-de-dados-co...

ANUNCIE

SEJA UM AUTOR

FAZEMOS CÓDIGO FRONT-END

ACOMPANHE
WEBINARS

CANAL NO MEDIUM

CANAL NO TELEGRAM

COMUNIDADE
FEMUG

MEETUPCSS

PODCAST ZOFE

BRAZILJS

DEVNAESTRADA

FRONT-END BRASIL

Escrito pela e para a comunidade web brasileira. Ajude.


Change privacy settings

17
Shares

12 of 12 06/11/2021 10:17

Você também pode gostar