As 5 principais bibliotecas JavaScript para Web Scraping

Robert Sfichi em 03 de abril de 2021

À medida que a era dos computadores foi evoluindo, as pessoas desenvolveram muitas técnicas úteis que podem criar conjuntos de dados gigantescos. Uma dessas técnicas chama-se "web scraping" e é utilizada com mais frequência por cientistas de dados, estatísticos, cientistas informáticos e programadores de software para recolher informações valiosas sobre uma questão específica.

A técnica de raspagem da Web pode ser feita de muitas maneiras, utilizando várias ferramentas, como APIs, extensões de navegador, estruturas e assim por diante. Mas o foco deste artigo é a última categoria de ferramentas mencionada.

Sendo uma das linguagens de programação mais utilizadas para o desenvolvimento de software, o JavaScript tem muitas bibliotecas que o podem ajudar no processo de recolha dos dados de que necessita.

A este respeito, gostaríamos de lhe oferecer as nossas recomendações para as 5 bibliotecas JavaScript mais úteis em termos de web scraping.

Uma breve introdução à recolha de dados da Web

Como o nome sugere, um web scraper é uma peça de software que rastreia diferentes páginas web no processo de extração de dados, tais como cadeias específicas, números ou anexos.

É uma alternativa melhor do que copiar e colar informações de uma página Web para uma folha de cálculo. Em vez de o fazer, um programa de computador pode fazê-lo por si. É muito mais rápido e provavelmente mais preciso. É bastante claro que, sem ele, teríamos de trabalhar muito mais para obter os mesmos resultados.

Casos de utilização de raspagem da Web

As pessoas utilizam scrapers da Web por todo o tipo de razões. Os casos de utilização mais populares são:

  • Geração de contactos
  • Comparação de preços
  • Análise do mercado
  • Investigação académica
  • Auditoria SEO e pesquisa de palavras-chave
  • Criação de conjuntos de dados de treino e teste para processos de aprendizagem automática

Uma empresa de comércio eletrónico pode utilizar um "web scraper" para recolher informações sobre as fotografias, as caraterísticas ou a descrição de um produto que tenham sido escritas pelos concorrentes, a fim de ter uma melhor visão geral do mercado.

O GPT-3 é considerado uma das ferramentas de software mais poderosas do mercado atualmente. Os scripts de aprendizagem automática funcionam melhor quando são alimentados com uma grande quantidade de dados. No entanto, isto pode demorar horas ou mesmo dias. Os cientistas de dados podem utilizar a ajuda fornecida pelos "web scrapers" para reunir todos os conjuntos de dados de que necessitam para treinar os modelos de aprendizagem automática.

Preparar o seu espaço de trabalho

Para poder utilizar as seguintes bibliotecas, tem de se certificar de que tem o Node.js instalado no seu computador. Para verificar isso, execute o seguinte comando numa nova janela do terminal:

nó -v

Se tiver o Node.js instalado, deverá ver a versão a aparecer na linha seguinte. Será algo parecido com isto:

v14.15.0

Se tiver recebido a confirmação de que o Node.js está instalado, avance para a secção seguinte. Para aqueles que não instalaram o Node.js antes, vamos passar pelo processo de instalação agora mesmo.

Primeiro, vá para o site do Node.js e obtenha a versão mais recente (14.16.0 no momento em que escrevo este artigo). Clique no botão que diz "Recomendado para a maioria dos utilizadores" e aguarde que a transferência seja concluída. Inicie o instalador quando o download estiver concluído.

Quando a instalação estiver concluída, pode verificar a versão do Node.js executando o seguinte comando numa nova janela do terminal:

nó -v

Após alguns segundos, deverá ver a versão do Node.js que tem instalada.

As 5 principais ferramentas JavaScript utilizadas para a recolha de dados da Web

Axios

Axios é uma das bibliotecas JavaScript mais populares, utilizada para fazer pedidos HTTP diretamente a partir de um ambiente Node.js. Usando o Axios, também podemos baixar dados com facilidade, removendo a necessidade de passar os resultados da solicitação HTTP para o método .json(). Escusado será dizer que o Axios é uma ferramenta muito poderosa quando se trata de raspagem da web.

Para instalar o Axios, execute o seguinte comando na pasta do projeto:

npm i axios

Ao utilizar as próximas bibliotecas, demonstraremos mais claramente o poder do Axios.

Pesadelo

O Nightmare foi criado com a intenção de ajudar os seus utilizadores a automatizar diferentes tarefas em sítios Web que não possuem uma API.

Atualmente, a maioria das pessoas utiliza-a para criar um pedido mais realista ao tentar extrair dados de uma página Web. Ao utilizar as suas caraterísticas principais, podemos imitar a ação de um utilizador com uma API que parece síncrona para cada bloco de scripting.

Vejamos um exemplo real de como alguém poderia utilizar o Nightmare para fins de raspagem da Web.

Como está a utilizar o Electron em vez do Chromium, o tamanho do pacote é um pouco mais pequeno. O Nightmare pode ser instalado executando o seguinte comando.

npm i pesadelo

Vamos tentar tirar uma captura de ecrã de uma página Web aleatória. Vamos criar um novo ficheiro index.js e escrever ou copiar o seguinte código:

const Nightmare = require('nightmare')

const nightmare = new Nightmare()
return nightmare.goto('https://www.old.reddit.com/r/learnprogramming')
.screenshot('./screenshot.png')
.end()
.then(() => {
console.log('Done!')
})
.catch((err) => {
console.error(err)
})

Como se pode ver, na linha 2 criamos uma nova instância do Nightmare, apontamos o browser para a página Web que queremos capturar, tiramos e guardamos a captura de ecrã na linha 5 e terminamos a sessão do Nightmare na linha 6.

Para o executar, digite o seguinte comando no terminal e prima enter.

node index.js

Deverá ver dois novos ficheiros screenshot.png na pasta dos projectos.

Adeusinho

Para testar a funcionalidade do Cheerio, vamos tentar recolher todos os títulos de publicações no mesmo subreddit: /r/learnprogramming.

Vamos criar um novo ficheiro chamado index.js e digitar ou apenas copiar as seguintes linhas:

const axios = require("axios");
const cheerio = require("cheerio");

const fetchTitles = async () => {
try {
const response = await axios.get('https://old.reddit.com/r/learnprogramming/');

const html = response.data;

const $ = cheerio.load(html);

const titles = [];

$('div > p.title > a').each((_idx, el) => {
const title = $(el).text()
titles.push(title)
});

return titles;
} catch (error) {
throw error;
}
};

fetchTitles().then((titles) => console.log(titles));

Como podemos ver, o Cheerio implementa um subconjunto do núcleo do jQuery. Para termos a certeza absoluta de que apenas seleccionamos as etiquetas âncora que contêm o título da publicação, vamos também selecionar os seus pais utilizando o seguinte seletor na linha 15.

Para obter cada título individualmente, percorremos cada publicação utilizando a função each(). Por fim, chamar text() a cada item devolver-nos-á o título dessa publicação específica.

Para o executar, basta escrever o seguinte comando no terminal e premir enter.

node index.js

Deverá ver uma matriz que contém todos os títulos das mensagens.

Marionetista

O Puppeteer ajuda-nos a automatizar as tarefas mais básicas que normalmente fazemos quando utilizamos um navegador Web, como preencher um formulário ou fazer capturas de ecrã de páginas específicas.

Vamos tentar compreender melhor a sua funcionalidade tirando uma captura de ecrã da comunidade /r/learnprogramming do Reddit. Execute o seguinte comando na pasta de projetos para instalar a dependência:

npm i puppeteer 

Agora, crie um novo ficheiro index.js e escreva ou copie o seguinte código:

const puppeteer = require('puppeteer')

async function takeScreenshot() {
try {
const URL = 'https://www.old.reddit.com/r/learnprogramming/'
const browser = await puppeteer.launch()
const page = await browser.newPage()

await page.goto(URL)
await page.pdf({ path: 'page.pdf' })
await page.screenshot({ path: 'screenshot.png' })

await browser.close()
} catch (error) {
console.error(error)
}
}

takeScreenshot()

Criámos a função assíncrona takeScreenshot().

Como pode ver, os métodos pdf() e screenshot() ajudam-nos a criar um novo ficheiro PDF e uma imagem que contém a página Web como componente visual.

Para o executar, execute node index.js numa nova janela do terminal. Deverá ver dois novos ficheiros na pasta de projectos chamados page.pdf e screenshot.png.

Selénio

O Selenium é utilizado por muitos especialistas em automação, cientistas de dados, engenheiros de garantia de qualidade e programadores de software. Basta instalá-lo e escrever menos de 10 linhas de código para sentirmos o poder da recolha de dados da Web.

Tal como o Nightmare, o Selenium cria um pedido HTTP mais realista ao completar acções como a abertura de uma página, o clique num botão ou o preenchimento de formulários.

Podemos instalar o Selenium executando o seguinte comando numa nova janela do terminal:

npm i selenium-webdriver

Agora, vamos tentar fazer uma pesquisa no Google. Primeiro, crie um novo ficheiro index.js e escreva ou copie o seguinte código:

const {Builder, By, Key, until} = require('selenium-webdriver');

(async function example() {
let driver = await new Builder().forBrowser('firefox').build();
try {
await driver.get('http://www.google.com/');
await driver.findElement(By.name('q'));
await driver.sendKeys(web scraping, Key.RETURN);
await driver.wait(until.titleIs('web scraping - Google Search'), 1000);
} finally {
await driver.quit();
}
})();

Consulte a documentação do Selenium para obter mais informações.

Conclusão

A raspagem da Web é uma técnica muito poderosa para extrair informações de páginas Web. Para qualquer um dos casos de utilização apresentados acima, a raspagem da Web pode poupar muito dinheiro e tempo. Se o script for programado de forma adequada, o computador pode extrair e organizar muito mais informações do que um ser humano. É por isso que as bibliotecas corretas são importantes.

As dificuldades surgem quando se efectua a recolha de dados da Web. Os problemas são inevitáveis, mas normalmente podem ser resolvidos. No final, o que importa é a sua experiência. Se se sente mais confortável a utilizar o Selenium em vez do Nightmare, vá em frente. Não existe uma biblioteca perfeita e nós sabemos disso. Só esperamos ter conseguido tornar o seu processo de decisão um pouco menos complicado.

Pode encontrar mais informações sobre a recolha de dados da Web nos seguintes artigos:

Notícias e actualizações

Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

miniatura
GuiasComo extrair dados de produtos da Amazon: Um guia abrangente de melhores práticas e ferramentas

Explore as complexidades da extração de dados de produtos da Amazon com nosso guia detalhado. De práticas recomendadas e ferramentas como a API Amazon Scraper a considerações legais, saiba como enfrentar desafios, contornar CAPTCHAs e extrair insights valiosos com eficiência.

Suciu Dan
avatar do autor
Suciu Dan
15 min. de leitura
miniatura
GuiasSaiba como contornar a deteção do Cloudflare com o melhor navegador Selenium

Saiba qual é o melhor browser para contornar os sistemas de deteção Cloudflare enquanto faz web scraping com o Selenium.

Mihnea-Octavian Manolache
avatar do autor
Mihnea-Octavian Manolache
9 min. de leitura
miniatura
GuiasDesbloqueie sítios Web e proteja a sua identidade com proxies e Axios Node.js

Saiba como usar proxies com Axios e Node.js para uma raspagem eficiente da Web. Dicas, exemplos de código e os benefícios de usar WebScrapingAPI incluídos.

Suciu Dan
avatar do autor
Suciu Dan
7 min. de leitura