Introdução à Web Scraping com Node.js (JavaScript)

Scraping, Jan-08-20225 minutos de leitura

Você está procurando maneiras de usar novas tecnologias? A extração da Web ou a Web scraping oferece uma maneira de coletar dados estruturados da Web de forma automatizada. Por exemplo, a Web scraping é usada no mundo do comércio eletrônico para monitorar os preços dos serviços e produtos dos concorrentes. Outros casos de uso da web scraping

Índice

Você está procurando maneiras de usar novas tecnologias? A extração da Web ou a Web scraping oferece uma maneira de coletar dados estruturados da Web de forma automatizada. Por exemplo, a Web scraping é usada no mundo do comércio eletrônico para monitorar os preços dos serviços e produtos dos concorrentes. Outros casos de uso da Web scraping são apresentados a seguir.

  • Encontrar dados de tendências em sites de mídia social
  • Coleta de dados de outro site para uso em seu próprio site
  • Extração de endereços de e-mail de sites que publicam e-mails públicos
  • Scraping lojas on-line para fotos de produtos e dados de vendas

Você aprenderá como fazer a Web scraping com o Node.js. Mas, primeiro, vamos dar uma olhada no que é o Node.js. É uma plataforma de código aberto do lado do servidor para desenvolver aplicativos do lado do servidor e de rede. Sua biblioteca é muito rápida na execução do código porque seus aplicativos não armazenam dados em buffer. Eles simplesmente geram os dados em partes. Abaixo estão algumas das áreas em que podemos usar o Node.js.

  • Aplicativos de streaming de dados
  • Aplicativos de página única
  • Aplicativos vinculados de entrada/saída
  • Aplicativos em tempo real com uso intensivo de dados

Por que usar o Node.js para a Web Scraping?

Veja a seguir os motivos para usar o Node.js na Web scraping.

Fácil de aprender - o Javascript é uma linguagem de programação popular usada por desenvolvedores de front-end. Eles podem aprender e usar rapidamente o Node.js no backend, pois é um Javascript simples. Portanto, não é necessário fazer um esforço extra para aprender o Node.js.

Linguagem de programação única - Você pode usar o Node.js para escrever aplicativos do lado do servidor em Javascript. Em resumo, os desenvolvedores do Node.js usam Javascript para escrever aplicativos da Web de front-end e back-end. Eles não precisam usar nenhuma outra linguagem de programação do lado do servidor. Assim, eles podem implementar facilmente aplicativos da Web porque quase todos os navegadores da Web são compatíveis com Javascript. 

Escalabilidade - Os desenvolvedores do Node.js podem escalonar facilmente os aplicativos nas direções horizontal e vertical. Eles podem acrescentar nós adicionais aos sistemas existentes para dimensionar os aplicativos horizontalmente. Eles podem dimensionar verticalmente os aplicativos adicionando recursos extras aos nós individuais. 

Alto desempenho - o Node.js usa o mecanismo V8 Javascript do Google para interpretar o código Javascript à medida que o compila diretamente no código de máquina. Assim, você pode implementar o código com eficiência usando esse mecanismo. 

Cache - Os desenvolvedores também podem armazenar em cache módulos individuais usando o ambiente de tempo de execução de código aberto do Node.js. O armazenamento em cache permite que os aplicativos carreguem as páginas da Web mais rapidamente, para que os desenvolvedores não precisem reutilizar os códigos.   

Web Scraping usando Node.js

Para a Web scraping usando o Node.js, usaremos os dois módulos npm a seguir.

cheerio - É uma tecnologia Javascript usada para extrair dados de sites. Ela ajuda a selecionar, editar e visualizar elementos DOM.

request-promise - É um cliente HTTP simples que você pode usar para fazer chamadas HTTP rápidas e fáceis.

Configuração do projeto

Você precisa criar uma nova pasta de projeto. Criar um arquivo index.js dentro dessa pasta. Em seguida, você deve instalar as dependências. Para isso, abra sua linha de comando e digite o seguinte comando. 

npm install --save request request-promise cheerio

Você precisa exigir o request-promise e o cheerio em seu arquivo index.js usando o código abaixo.

const rp = require('request-promise');
const cheerio = require('cheerio');

Definir solicitação

Você sabe que request-promise é uma "solicitação" do cliente com suporte a Promise. Em outras palavras, ele aceita um objeto como entrada e retorna uma promessa. 

const options = {
 uri: `https://www.yourURLhere.com`,
 transform: function (body) {
   return cheerio.load(body);
 }
};

No código acima, o objeto options precisa fazer duas coisas.

  • Passando o URL, você deseja scrape
  • Carregando o HTML retornado usando o cheerio para que você possa usá-lo.

A chave uri no código é o site que você deseja acessar scrape.

A chave de transformação carrega o corpo retornado no cheerio usando request-promise antes de devolvê-lo para nós.

Fazer solicitação

Você pode fazer sua solicitação usando o código abaixo.

rp(OPTIONS)
   .then(function (data) {
       // REQUEST SUCCEEDED: DO SOMETHING
   })
   .catch(function (err) {
       // REQUEST FAILED: ERROR OF SOME KIND
   });

Estamos passando o objeto options para request-promise no código acima. Em seguida, esperamos para ver se nossa solicitação é bem-sucedida ou não. 

Agora, criamos nossa própria versão do código em que usamos as funções de seta, conforme mostrado abaixo.

rp(options)
 .then(($) => {
   console.log($);
 })
 .catch((err) => {
   console.log(err);
 });

É necessário substituir o uri do espaço reservado pelo site que deseja scrape. Em seguida, abra o console e digite o seguinte no arquivo index.js.

{ [Function: initialize]
 fn:
  initialize {
    constructor: [Circular],
    _originalRoot:
     { type: 'root',
       name: 'root',
       namespace: 'http://www.w3.org/1999/xhtml',
       attribs: {},
       ...

É assim que você pode criar seu primeiro scrape usando o Node.js. Aqui está o código completo que fizemos até agora.

const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
  uri: `https://www.google.com`,
  transform: function (body) {
    return cheerio.load(body);
  }
};

rp(options)
  .then(($) => {
    console.log($);
  })
  .catch((err) => {
    console.log(err);
  });

Use os dados

Você pode usar o cheerio para extrair os dados que deseja. A implementação do seletor do cheerio é quase igual à do jQuery. Você pode usar o método do seletor para percorrer e selecionar elementos no documento. Você também pode usá-lo para obter e definir dados. Por exemplo, você deseja acessar scrape o seguinte HTML de um site.

 id="cities">
 class="large">Europa
 id="medium">Turquia
 class="small">Salem

Podemos usar '#' para selecionar ids, '.' para selecionar classes. Os elementos podem ser selecionados por seus nomes de tag, conforme mostrado abaixo.

$('.large').text()
// Europa
$('#medium').text()
// Turquia
$('li[class=small]').html()

Podemos usar a função each() para iterar por vários elementos. Podemos retornar o texto interno do item da lista usando o mesmo código HTML mostrado acima.

$('li').each(function(i, elem) {
 cities[i] = $(this).text();
});

É assim que você pode scrape dados de sites usando o Node.js. Você também pode usar métodos adicionais para extrair os dados de elementos filhos de uma lista ou o HTML de um site.

A importância de usar o Node.js com Proxies

Você sabe que o proxies atua como intermediário entre os clientes que solicitam recursos e o servidor que os fornece. Há três tipos diferentes de proxies, conforme mostrado abaixo.

Residential Proxy - Esse proxy contém endereços IP do ISP (Internet Service Provider, Provedor de Serviços de Internet) local, de modo que o site de destino não pode determinar se é uma pessoa real ou o scraper que está navegando no site. 

Datacenter Proxy - Esse tipo de proxy é de um provedor de serviços em nuvem e é usado por um grande número de pessoas porque é mais barato do que o proxies residencial.

Proxy móvel - Os proxies móveis são IPs de dispositivos móveis privados e funcionam exatamente como os proxies residenciais. Eles são fornecidos pelas operadoras de rede móvel e são muito caros. 

Você pode usar um proxy para a Web scraping usando o módulo de solicitações do Python. Primeiro, você precisa importar o módulo de solicitações. Em seguida, é preciso criar um conjunto de proxies e iterá-los. Você pode usar requests.get() para enviar a solicitação GET passando um proxy como parâmetro para o URL, conforme mostrado abaixo.

import requests
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
# Sending a GET request to the url and
# passing the proxy as a parameter.
page = requests.get(url,
                   proxies={"http": proxy, "https": proxy})
 # Printing the content of the requested url.
print(page.text)

Você obterá o resultado abaixo.

Conclusão sobre a Web Scraping usando Node.js

Até agora, discutimos que você pode extrair dados estruturados de sites usando o método automatizado chamado web scraping. Você pode scrape os sites usando diferentes linguagens, mas, neste artigo, aprendemos a usar o Node.js para coletar dados de sites. Tudo o que temos de fazer é adicionar o código ao arquivo index.js da pasta do projeto. Depois de configurar o projeto, podemos definir e fazer a solicitação para extrair os dados. Além disso, podemos usar os dados para várias finalidades. Você sabe que não é seguro usar os sites scrape . Portanto, você precisa usar o proxies para coletar dados do site desejado. Você pode usar o proxiesresidencial ou do datacenter, mas é preferível usar o proxies residencial, pois eles são rápidos e não podem ser facilmente detectados.