Voltar ao blogue
Guias
Sergiu InizianLast updated on Mar 31, 202610 min read

Cheerio vs Puppeteer: Guia para escolher a melhor ferramenta de web scraping

Cheerio vs Puppeteer: Guia para escolher a melhor ferramenta de web scraping

Está a tentar decidir qual a ferramenta a utilizar para a extração de dados da Web? Pode ser difícil escolher entre todas as opções disponíveis, mas não se preocupe – estou aqui para ajudar. Neste artigo, vamos analisar mais detalhadamente o Cheerio e o Puppeteer, duas ferramentas populares para a extração de dados da Web.

O Cheerio é uma biblioteca para analisar e manipular documentos HTML, enquanto o Puppeteer é uma biblioteca para controlar um navegador Chrome sem interface gráfica. O Cheerio permite-lhe selecionar elementos utilizando uma sintaxe semelhante à do jQuery, enquanto o Puppeteer pode ser utilizado para tarefas como web scraping, testes e automatização do envio de formulários.

Então, vamos mergulhar de cabeça e começar a fazer web scraping!

O que é o Cheerio?

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

O Cheerio é leve e fácil de usar, tornando-o uma boa escolha 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 tem de carregar todos os recursos e ativos. 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 web scraping. 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 web scraping. A sua sintaxe é semelhante à do jQuery, que é familiar a muitos programadores, 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 web scraping, uma vez que não precisa de carregar todos os recursos e elementos que um navegador carregaria. Isto torna-o uma boa escolha para tarefas em que a velocidade é importante.
  • Suporte para documentos HTML e XML: O Cheerio consegue analisar e manipular documentos HTML e XML, dando-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-lhe automatizar tarefas no Chrome sem ter de abrir uma janela do Chrome, o que reduz o número de recursos que o seu scraper irá consumir.

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 escolha para tarefas que requerem 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 web scraping e automação. Algumas das principais funcionalidades e vantagens do Puppeteer incluem:

  • API de alto nível: O Puppeteer fornece uma API de alto nível que é fácil de usar e compreender. Isto torna-o uma boa escolha para programadores que são novos na extração de dados da Web ou na automação.
  • Controlo sobre um navegador Chrome headless: O Puppeteer permite-lhe controlar um navegador Chrome headless, o que significa que pode automatizar tarefas no Chrome sem ter de abrir uma janela do Chrome. Isto torna-o uma boa escolha para tarefas que requerem interações mais complexas com um site.
  • Imita o comportamento humano: O Puppeteer consegue imitar o comportamento humano, como clicar em botões, percorrer páginas e preencher formulários. Isto torna-o uma boa escolha para tarefas que requerem interações mais complexas com um site.
  • Suporte para funcionalidades web modernas: O Puppeteer oferece suporte total para funcionalidades web modernas, como JavaScript, cookies e CAPTCHAs. Isto torna-o uma boa escolha para tarefas que requerem estas funcionalidades.
  • Pode ser utilizado em combinação com outras ferramentas: O Puppeteer pode ser utilizado em combinação 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 ambos ferramentas populares para web scraping, mas apresentam algumas diferenças fundamentais que os tornam mais adequados para determinadas tarefas. Aqui estão algumas das principais diferenças entre o Cheerio e o Puppeteer:

  • Desempenho: O Cheerio é geralmente mais rápido do que o Puppeteer porque não precisa de carregar todos os recursos e ativos 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 para 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 poderoso e pode automatizar tarefas num navegador Chrome headless, tais como iniciar sessão, navegar por páginas e preencher formulários.
  • Facilidade de utilização: O Cheerio tem uma sintaxe semelhante à do jQuery, que é familiar a muitos programadores. Isto torna-o fácil de utilizar para quem já está familiarizado com o jQuery. O Puppeteer também possui uma API de alto nível que é fácil de utilizar, mas requer mais instalaçã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 precisa de extrair alguns dados de um documento HTML e o desempenho é uma preocupação, o Cheerio pode ser a melhor escolha. Se precisa 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:

node -v

Se receber um erro, descarregue e instale o Node.js a partir do site oficial. Isto também instalará o `npm`, o gestor de pacotes para o 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 solicitação, ou pode introduzir os seus próprios valores conforme desejar.

Pode agora começar a instalar 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 alvo

Para este artigo, iremos extrair um artigo da ArsTechnica e extrair 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 de destino 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 de Programador e destacar o elemento HTML da tag de título.

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

Para escolher o seletor da imagem de capa, use a ferramenta Inspecionar. A imagem está envolvida numa tag `figure`, por isso é uma boa ideia incluir o elemento pai no seletor. O seletor final é `figure img`.

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

Uma vez que o primeiro parágrafo não é o primeiro elemento filho do pai, é necessário um seletor CSS adicional. O elemento pai tem uma classe chamada `article-content`. Podemos utilizar 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 seletores:

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

Construir o scraper

Agora que temos as dependências no projeto, vamos ver como usar o Cheerio e o Puppeteer em conjunto para criar um scraper web. Ao combinar estas duas ferramentas, pode criar um scraper que é rápido e poderoso, 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 usando o comando node scrape.js. A saída deve exibir o título do artigo e o URL da imagem de capa, e deve ficar assim:

{

  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'

}

Passar para o próximo nível

Agora que já aprendeu a extrair dados básicos de uma única página web usando o Puppeteer e o Cheerio, está na hora de levar as suas competências de 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 modificar 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 atualizações numa 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 fazer scraping em sites que bloqueiam ou limitam os pedidos com base no agente de utilizador.
  • Integrar uma rede de proxy: Uma rede de proxy pode ajudá-lo a alternar endereços IP e evitar a deteção. Isto é especialmente útil para extrair dados de sites que bloqueiam IPs ou limitam a frequência das solicitações.
  • Resolver captchas: Alguns sites utilizam captchas para impedir o scraping automatizado. Existem várias formas de contornar captchas, tais como utilizar um serviço de resolução de captchas ou implementar um modelo de aprendizagem automática para reconhecer e resolver captchas.

Conclusão

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

Se quiser aprofundar-se no Cheerio, consulte este artigo escrito por um dos meus colegas. Aborda temas como a identificação de nós utilizando o Inspect Element, o armazenamento dos resultados em disco e a extração de dados de um site de grande dimensão como o Reddit com mais pormenor.

Apenas abordámos superficialmente as capacidades do Puppeteer. Se quiser saber mais, este artigo aprofunda o tema e aborda tópicos como tirar uma captura de ecrã, enviar um formulário e fazer scraping 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 scraper como serviço, como o WebScrapingAPI.

Utilizar um serviço como este traz várias vantagens:

  • Pode confiar que o scraper é fiável e bem mantido: o scraper dispõe de 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 scraper web pode muitas vezes ser mais económico do que construir o seu próprio: não terá de investir no desenvolvimento e manutenção do scraper e poderá tirar partido de quaisquer funcionalidades especiais ou suporte que a empresa ofereça.
  • Ser detetado deixará de ser um problema: um scraper web premium evita a deteção e, muitas vezes, consegue extrair dados de sites de forma mais eficaz e eficiente do que um scraper que crie você mesmo. Isto poupa-lhe tempo e permite-lhe concentrar-se na análise e utilização dos dados extraídos.

Recomendamos que experimente o nosso scraper web 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
Sergiu Inizian, Redator de conteúdos técnicos @ WebScrapingAPI
Sergiu InizianRedator de conteúdos técnicos

Sergiu Inizian é redator de conteúdos técnicos na WebScrapingAPI, criando conteúdos claros e práticos que ajudam os programadores a compreender o produto e a utilizá-lo de forma eficaz.

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.