Voltar ao blogue
Guias
Suciu Dan11 de abril de 202311 min de leitura

Cheerio vs Puppeteer: Guia para escolher a melhor ferramenta de raspagem da Web

Cheerio vs Puppeteer: Guia para escolher a melhor ferramenta de raspagem da Web

O que é o Cheerio?

A Cheerio é uma biblioteca JavaScript que analisa e manipula documentos HTML, permitindo selecionar, modificar e realizar ações sobre elementos dentro de um documento utilizando uma sintaxe semelhante à do jQuery.

O Cheerio é leve e fácil de usar, o que o torna uma boa opção para tarefas simples de web scraping. É também mais rápido do que utilizar um navegador completo, como o Chrome ou o Firefox, uma vez que não precisa de carregar todos os elementos e recursos. Isto torna-o ideal para extrair dados de um documento HTML.

O Cheerio possui muitas funcionalidades e vantagens que o tornam uma escolha popular para a extração de dados da Web. Algumas das principais funcionalidades e vantagens do Cheerio incluem:

  • Leve e fácil de usar: o Cheerio foi concebido para ser leve e fácil de usar, tornando-o uma excelente escolha para tarefas simples de extração de dados da Web. A sua sintaxe é semelhante à do jQuery, com a qual muitos programadores estão familiarizados, e permite selecionar e manipular elementos num documento HTML com apenas algumas linhas de código.
  • Rápido: O Cheerio é mais rápido do que utilizar um navegador completo para a extração de dados da Web, uma vez que não precisa de carregar todos os elementos e recursos que um navegador carregaria. Isto torna-o uma boa opção para tarefas em que a velocidade é importante.
  • Suporte para documentos HTML e XML: O Cheerio consegue analisar e manipular documentos HTML e XML, oferecendo-lhe a flexibilidade de trabalhar com diferentes tipos de documentos, conforme necessário.
  • Pode ser utilizado em combinação com outras ferramentas: O Cheerio pode ser utilizado em combinação com outras ferramentas, como a API Fetch ou o Axios, para realizar tarefas de web scraping. Isto permite-lhe adaptar o seu fluxo de trabalho às suas necessidades específicas e utilizar as melhores ferramentas para o trabalho.

O que é o Puppeteer?

O Puppeteer é uma biblioteca Node.js que fornece uma API de alto nível para controlar um navegador Chrome sem interface gráfica. Permite automatizar tarefas no Chrome sem ter de abrir uma janela do navegador, o que reduz o consumo de recursos do seu scraper.

Pode utilizar o Puppeteer para realizar ações como preencher formulários, clicar em botões e extrair dados de sites.

Uma das principais vantagens do Puppeteer é que permite interagir com sites de uma forma semelhante à de um utilizador humano. Isto torna-o uma boa opção para tarefas que exigem interações mais complexas com um site, tais como iniciar sessão, navegar pelas páginas e preencher formulários.

O Puppeteer possui várias funcionalidades e vantagens que o tornam uma escolha popular para a extração de dados da Web e a automação. Algumas das principais funcionalidades e vantagens do Puppeteer incluem:

  • API de alto nível: O Puppeteer oferece uma API de alto nível que é fácil de usar e compreender. Isto torna-o uma boa escolha para programadores que estão a dar os primeiros passos na extração de dados da Web ou na automação.
  • Controlo de um navegador Chrome sem interface gráfica: O Puppeteer permite-lhe controlar um navegador Chrome sem interface gráfica, o que significa que pode automatizar tarefas no Chrome sem ter de abrir uma janela do navegador. Isto torna-o uma boa opção para tarefas que exigem interações mais complexas com um site.
  • Imita o comportamento humano: O Puppeteer consegue imitar comportamentos humanos, como clicar em botões, percorrer páginas e preencher formulários. Isto torna-o uma boa opção para tarefas que exigem interações mais complexas com um site.
  • Suporte a funcionalidades web modernas: O Puppeteer oferece suporte total a funcionalidades web modernas, como JavaScript, cookies e CAPTCHAs. Isto torna-o uma boa escolha para tarefas que requerem essas funcionalidades.
  • Pode ser utilizado em conjunto com outras ferramentas: O Puppeteer pode ser utilizado em conjunto com outras ferramentas, como o Cheerio, para realizar tarefas de web scraping. Isto permite-lhe adaptar o seu fluxo de trabalho às suas necessidades específicas e utilizar as melhores ferramentas para o trabalho.

Diferenças entre o Cheerio e o Puppeteer

O Cheerio e o Puppeteer são ambas ferramentas populares para a extração de dados da Web, mas apresentam algumas diferenças fundamentais que as tornam mais adequadas para determinadas tarefas. Aqui estão algumas das principais diferenças entre o Cheerio e o Puppeteer:

  • Desempenho: O Cheerio é, em geral, mais rápido do que o Puppeteer, uma vez que não precisa de carregar todos os recursos e elementos que um navegador carregaria. No entanto, o Puppeteer tem a vantagem de poder interagir com sites de uma forma semelhante à de um utilizador humano, o que pode torná-lo mais rápido em determinadas tarefas.
  • Funcionalidade: O Cheerio é adequado para tarefas simples de web scraping que envolvem a extração de dados de documentos HTML ou XML. O Puppeteer é mais potente e permite automatizar tarefas num navegador Chrome sem interface gráfica, tais como iniciar sessão, navegar entre páginas e preencher formulários.
  • Facilidade de utilização: O Cheerio tem uma sintaxe semelhante à do jQuery, com a qual muitos programadores estão familiarizados. Isto torna-o fácil de utilizar para quem já conhece o jQuery. O Puppeteer também dispõe de uma API de alto nível fácil de utilizar, mas requer mais preparação e configuração do que o Cheerio.

Em geral, a escolha entre o Cheerio e o Puppeteer dependerá das necessidades específicas da sua tarefa de web scraping. Se apenas precisar de extrair alguns dados de um documento HTML e o desempenho for uma preocupação, o Cheerio poderá ser a melhor opção. Se precisar de automatizar, o Puppeteer é a escolha certa.

Verificar ou instalar o Node.JS

Antes de começarmos, certifique-se de que o Node.JS está instalado no seu computador. A versão do Node utilizada neste artigo é a 18.9.0. Execute este comando para verificar a sua versão local:

nó -v

Se estiver a receber um erro, descarregue e instale o Node.js a partir do site oficial. Isto também instalará o `npm`, o gestor de pacotes do Node.js.

Configurar o projeto

Abra o terminal e crie uma nova pasta chamada `scraper`. Aceda ao diretório e execute o comando npm init. Isto irá criar um ficheiro `package.json` para o seu projeto, contendo metadados como o nome, a versão e as dependências.

Siga as instruções para introduzir informações sobre o seu projeto. Pode premir `Enter` para aceitar os valores predefinidos para cada instrução, ou pode introduzir os valores que desejar.

Já pode começar a instalar as dependências e a criar ficheiros para o seu projeto:

npm install cheerio puppeteer

As dependências serão instaladas no diretório `node_modules` do seu projeto e também serão adicionadas à secção de dependências do seu ficheiro `package.json`.

Definir um objetivo

Neste artigo, iremos extrair um artigo do site ArsTechnica e recolher o título do artigo, o URL da imagem de capa e o primeiro parágrafo do corpo do artigo.

Curso intensivo básico sobre extração de dados

Para começar, aceda ao site em questão e abra um artigo. Clique com o botão direito do rato no título do artigo e selecione «Inspecionar». Isto irá abrir as Ferramentas do Desenvolvedor e destacar o elemento HTML correspondente à tag de título.

Navegador a apresentar um artigo da Ars Technica com o Chrome DevTools a inspecionar o código HTML do título no painel «Elementos»

Para boas práticas de SEO, uma página deve ter apenas um elemento H1. Por isso, o H1 pode ser utilizado como um seletor fiável para o título.

Para selecionar o seletor da imagem de capa, utilize a ferramenta Inspecionar. A imagem está inserida numa tag `figure`, pelo que é aconselhável incluir o elemento pai no seletor. O seletor final é `figure img`.

Por último, mas não menos importante, precisamos de encontrar o seletor do primeiro parágrafo.

Texto do artigo da Ars Technica destacado enquanto o painel «Elementos» das Ferramentas de Desenvolvedor do Chrome seleciona um nó de parágrafo

Uma vez que o primeiro parágrafo não é o primeiro elemento filho do elemento pai, é necessário um seletor CSS adicional. O elemento pai tem uma classe chamada `article-content`. Podemos usar esta classe em conjunto com o seletor `:first-of-type` para criar o nosso seletor final: `.article-content p:first-of-type`.

Aqui está a lista final com os selecionadores:

  • Título: `h1`
  • Imagem da capa: `figure img`
  • Primeiro parágrafo: `.article-content p:first-of-type`

Construir o raspador

Agora que já temos as dependências no projeto, vamos ver como utilizar o Cheerio e o Puppeteer em conjunto para criar um scraper web. Ao combinar estas duas ferramentas, é possível criar um scraper rápido e potente, por isso vamos começar!

Crie um ficheiro chamado `scrape.js` e cole o seguinte código nele:

const puppeteer = require('puppeteer');

const cheerio = require('cheerio');

async function scrape() {

    // Launch a headless Chrome browser

    const browser = await puppeteer.launch();

    // Create a new page

    const page = await browser.newPage();

    // Navigate to the website you want to scrape

    await page.goto('https://arstechnica.com/tech-policy/2023/01/musk-led-twitter-faces-another-lawsuit-alleging-it-failed-to-pay-bills/');

    // Wait for the page to load

    await page.waitForSelector('h1');

    // Extract the HTML of the page

    const html = await page.evaluate(() => document.body.innerHTML);

    // Use Cheerio to parse the HTML

    const $ = cheerio.load(html);

    // Extract the title, cover image, and paragraph using Cheerio's syntax

    const title = $('h1').text();

    const paragraph = $('.article-content p:first-of-type').text()

    const coverImage = $('figure img').attr('src');

    // Display the data we scraped

    console.log({

        title,

        paragraph,

        coverImage

    });

    // Close the browser

    await browser.close();

}

scrape();

Pode executar o código utilizando o comando `node scrape.js`. O resultado deverá apresentar o título do artigo e o URL da imagem de capa, e deverá ter o seguinte aspeto:

{

  title: 'Lawsuit: Twitter failed to pay $136,000 in rent at San Francisco office tower',

  paragraph: 'The Elon Musk-owned Twitter is facing another lawsuit alleging that it failed to pay its bills.',

  coverImage: 'https://cdn.arstechnica.net/wp-content/uploads/2023/01/getty-musk-twitter-800x533.jpg'

}

Levar isto para o próximo nível

Agora que já aprendeu a extrair dados básicos de uma única página web utilizando o Puppeteer e o Cheerio, está na hora de levar as suas competências em web scraping para o próximo nível. Eis o que pode fazer para transformar este scraper básico num scraper de última geração:

  • Extrair uma categoria inteira: Ao alterar o URL e os seletores no seu código, pode extrair os artigos de uma categoria. Isto é útil para extrair grandes quantidades de dados ou para acompanhar as atualizações de uma categoria específica de conteúdo.
  • Utilizar um agente de utilizador diferente em cada pedido: Ao alterar o agente de utilizador do seu scraper, pode contornar restrições e imitar melhor o comportamento humano. Isto pode ser útil para extrair dados de sites que bloqueiam ou limitam os pedidos com base no agente de utilizador.
  • Integrar uma rede de proxies: Uma rede de proxies pode ajudar a alternar endereços IP e a evitar a deteção. Isto é especialmente útil para extrair dados de sites que bloqueiam IPs ou limitam o número de pedidos.
  • Resolução de captchas: Alguns sites utilizam captchas para impedir a extração automatizada de dados. Existem várias formas de contornar os captchas, tais como recorrer a um serviço de resolução de captchas ou implementar um modelo de aprendizagem automática para reconhecer e resolver captchas.

Concluindo

A esta altura, já deve ter uma boa compreensão dos pontos fortes e das limitações do Cheerio e do Puppeteer, e deve estar apto a tomar uma decisão informada sobre qual deles se adequa melhor às suas necessidades. Existe uma ferramenta de web scraping ideal para si, quer seja um principiante ou um programador experiente.

Se quiseres aprofundar os teus conhecimentos sobre o Cheerio, dá uma vista de olhos neste artigo escrito por um dos meus colegas. Aborda temas como a identificação de nós através da ferramenta «Inspecionar Elemento», o armazenamento dos resultados no disco e a extração de dados de um site de grande dimensão, como o Reddit, de forma mais detalhada.

Ainda mal tocámos nas capacidades do Puppeteer. Se quiser saber mais, este artigo aprofunda o assunto e aborda temas como a captura de ecrãs, o envio de formulários e a extração de dados de várias páginas.

Esperamos que este artigo o tenha ajudado a compreender as opções disponíveis e a tomar a melhor decisão para as suas necessidades de web scraping.

Uma alternativa ainda mais fácil

Embora tenhamos discutido os pontos fortes e as limitações do Cheerio e do Puppeteer, existe outra opção que poderá considerar: utilizar um serviço de scraping como o WebScrapingAPI.

A utilização de um serviço como este apresenta várias vantagens:

  • Pode ter a certeza de que o scraper é fiável e está bem mantido: o scraper conta com recursos dedicados para garantir que está atualizado e a funcionar corretamente. Isto pode poupar-lhe muito tempo e esforço, em comparação com a criação e manutenção do seu próprio scraper.
  • Um serviço de web scraper pode, muitas vezes, ser mais económico do que criar o seu próprio: não terá de investir no desenvolvimento e na manutenção do scraper e poderá tirar partido de quaisquer funcionalidades especiais ou do apoio que a empresa oferece.
  • Ser detetado deixará de ser um problema: um web scraper premium evita a deteção e, muitas vezes, consegue extrair dados de sites de forma mais eficaz e eficiente do que um scraper criado por si. Isto poupa-lhe tempo e permite-lhe concentrar-se na análise e na utilização dos dados extraídos.

Recomendamos que experimente o nosso web scraper e comprove por si mesmo as vantagens de utilizar uma ferramenta fiável e de confiança. Crie uma conta gratuita agora.

Sobre o autor
Suciu Dan, cofundador da WebScrapingAPI
Suciu DanCo-fundador

Suciu Dan é cofundador da WebScrapingAPI e escreve guias práticos, voltados para programadores, sobre web scraping em Python, web scraping em Ruby e infraestruturas de proxy.

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.