🥳Junte-se à Comunidade Scrapeless e Solicite sua avaliação gratuita para acessar nosso poderoso kit de ferramentas de Web Scraping!
Voltar ao blog

Como fazer Web Scraping com Cheerio

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

01-Nov-2024

A raspage da Web permite que colete informações de sites para analisar e usar em várias aplicações, desde o monitoramento de preços de concorrentes até a extração de grandes conjuntos de dados. Neste guia, nos concentraremos no Cheerio, uma ferramenta poderosa para raspar e analisar HTML, particularmente adequada para páginas estáticas. Aqui, vamos mostrar como configurar um raspador baseado em Cheerio, mergulhar em técnicas essenciais de análise e usar um exemplo do mundo real para mostrar suas aplicações práticas.

O que é Cheerio?

Cheerio é uma biblioteca Node.js poderosa e versátil baseada em htmlparser2, oferecendo uma API de estilo jQuery para lidar e manipular elementos DOM do lado do servidor. Isso a torna uma opção popular para raspagem da Web, pois fornece métodos eficientes para análise de HTML e extração de dados. Suas APIs flexíveis e diretas fazem do Cheerio uma escolha ideal para tarefas de raspagem da Web em muitos projetos devido à sua facilidade de uso e velocidade de processamento.

Por que escolher Cheerio para raspagem da Web?

Cheerio é amplamente preferível para raspagem da Web em Node.js, especialmente ao lidar com conteúdo HTML estático. Sua natureza leve e rápida o torna ideal para cenários onde renderização de JavaScript não é necessária. Ao contrário de ferramentas baseadas em navegador como Puppeteer ou Playwright, o Cheerio analisa diretamente o HTML sem carregar páginas inteiras, o que conserva recursos e acelera o processo de raspagem.

Uma vantagem significativa do Cheerio é sua sintaxe semelhante ao jQuery, permitindo que os desenvolvedores interajam com elementos HTML usando seletores familiares de estilo CSS. Essa facilidade de uso, combinada com sua eficiência, faz do Cheerio uma solução ideal para tarefas simples de extração de dados.

Abaixo está uma comparação do Cheerio com outras bibliotecas populares:

Biblioteca Execução de JavaScript Uso de recursos Velocidade Caso de uso
Cheerio Não Baixo Rápido Raspagem de HTML estático
Puppeteer Sim Alto Moderado Raspagem de conteúdo dinâmico
Axios Não Baixo Rápido Obtenção de HTML bruto
Playwright Sim Alto Moderado Interagindo com sites SPA

Para desenvolvedores focados em raspar dados estáticos de forma eficiente, o Cheerio é uma ferramenta poderosa, porém simples. É especialmente útil para recuperar e analisar dados rapidamente sem a sobrecarga de renderização de JavaScript, tornando-o ideal para projetos que exigem uma solução simplificada e rápida.

Configurando o Cheerio para raspagem da Web

Antes de começar a raspar com o Cheerio, você precisa configurar seu ambiente de desenvolvimento. Esse processo envolve a instalação do Node.js, que é um tempo de execução do JavaScript que permite executar código JavaScript fora de um navegador da Web. Depois que o Node.js estiver instalado, você pode usar o Node Package Manager (npm) para instalar o Cheerio juntamente com o Axios, um cliente HTTP popular para fazer solicitações a páginas da Web.

Etapa 1: Instale o Node.js

Se você ainda não instalou o Node.js, pode baixá-lo do site oficial do Node.js. Siga as instruções de instalação para seu sistema operacional.

Etapa 2: Crie um novo projeto

Abra seu terminal ou prompt de comando e crie um novo diretório para seu projeto. Navegue até o diretório e inicialize um novo projeto Node.js executando:

bash Copy
mkdir cheerio-scraping
cd cheerio-scraping
npm init -y

Este comando criará um arquivo package.json que gerencia as dependências do seu projeto.

Etapa 3: Instale o Cheerio e o Axios

Agora que seu projeto está configurado, você pode instalar o Cheerio e o Axios executando o seguinte comando:

bash Copy
npm install cheerio axios

Este comando baixará e instalará ambas as bibliotecas, tornando-as disponíveis para uso em seu script.

Etapa 4: Crie seu script

Em seguida, crie um novo arquivo JavaScript no diretório do seu projeto. Você pode nomeá-lo scrape.js. Este arquivo conterá seu código de raspagem da Web.

Estrutura básica de um script de raspagem da Web Cheerio

Agora que você instalou o Cheerio e o Axios, vamos dar uma olhada na estrutura básica de um script de raspagem da Web usando essas bibliotecas. Abaixo está um trecho de código de amostra que demonstra como raspar dados do produto de um site de comércio eletrônico de exemplo.

Script de exemplo

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

// URL do site que você deseja raspar
const url = 'https://example.com/products';

// Função para buscar o conteúdo HTML
async function fetchHTML(url) {
    try {
        const { data } = await axios.get(url);
        return data;
    } catch (error) {
        console.error(`Não foi possível buscar a URL: ${error}`);
    }
}

// Função para raspar os dados do produto
async function scrapeProductData() {
    const html = await fetchHTML(url);
    const $ = cheerio.load(html);
    
    // Array para armazenar os dados raspados
    const products = [];

    // Selecione elementos e extraia dados
    $('.product-item').each((index, element) => {
        const productName = $(element).find('.product-name').text().trim();
        const productPrice = $(element).find('.product-price').text().trim();

        products.push({
            name: productName,
            price: productPrice
        });
    });

    console.log(products);
}

// Execute a função de raspagem
scrapeProductData();

Explicação do código

  1. Importações: O script começa importando as bibliotecas necessárias, Axios para solicitações HTTP e Cheerio para análise de HTML.

  2. Função fetchHTML: Esta função assíncrona recebe uma URL como argumento, faz uma solicitação GET para essa URL e retorna o conteúdo HTML. Se um erro ocorrer durante a solicitação, ele registra uma mensagem de erro no console.

  3. Função scrapeProductData: Esta função primeiro busca o conteúdo HTML usando fetchHTML. Em seguida, carrega o HTML no Cheerio usando cheerio.load().

  4. Extração de dados: Seleciona elementos com a classe .product-item e itera sobre cada elemento. Para cada produto, ele extrai o nome e o preço do produto, aparando espaços em branco e adiciona os resultados a um array.

  5. Saída: Finalmente, ele registra o array de dados do produto no console.

Analisando HTML com Cheerio: Técnicas principais

Com o Cheerio, analisar HTML é simples. Aqui está como extrair vários tipos de dados:

Extraindo texto de elementos

Extraia o conteúdo de texto de tags HTML usando .text(). Por exemplo, para obter todos os parágrafos:

javascript Copy
$('p').each((index, element) => {
    console.log(`Parágrafo ${index + 1}:`, $(element).text());
});

Extraindo valores de atributo

Para raspar imagens ou links, você precisará do método attr():

javascript Copy
$('img').each((index, element) => {
    const imgSrc = $(element).attr('src');
    console.log(`Imagem ${index + 1}:`, imgSrc);
});

Cheerio também oferece suporte a métodos como .parent(), .children() e .find() para navegação no DOM. Isso é útil quando os dados estão aninhados.

javascript Copy
$('.article').children('h2').each((index, element) => {
    console.log('Subtítulo:', $(element).text());
});

Exemplo: Raspagem de títulos de notícias de um blog

Vamos dar um exemplo prático raspando títulos de artigos recentes de um blog de tecnologia popular. Suponha que queremos extrair todos os títulos de artigos de https://example-blog.com.

Passos:

  1. Inspecione a estrutura HTML do blog para identificar a tag HTML que contém os títulos dos artigos (por exemplo, <h2 class="post-title">).
  2. Use o Cheerio para selecionar e recuperar esses elementos.

Código de exemplo:

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeBlogTitles() {
    try {
        const { data } = await axios.get('https://example-blog.com');
        const $ = cheerio.load(data);

        // Selecione todos os títulos do artigo
        $('h2.post-title').each((index, element) => {
            const title = $(element).text();
            console.log(`Artigo ${index + 1}:`, title);
        });

    } catch (error) {
        console.error('Erro ao buscar títulos do blog:', error);
    }
}

scrapeBlogTitles();

Neste exemplo:

  • axios.get() busca o conteúdo HTML do blog.
  • cheerio.load(data) carrega o conteúdo no Cheerio.
  • $('h2.post-title') seleciona todos os títulos com base na tag e na classe.
  • $(element).text() extrai e registra cada título.

Lidando com desafios comuns com o Cheerio

Aqui está a seção revisada sobre desafios comuns com o Cheerio, agora apresentando apenas dois sites reais para exemplos e incluindo hiperlinks:

Quais são os desafios comuns com o Cheerio

Embora o Cheerio seja uma ferramenta poderosa e versátil para raspagem da Web, não está livre de desafios. Os usuários geralmente enfrentam vários obstáculos que podem complicar o processo de extração de dados.

Um dos desafios mais significativos é lidar com conteúdo dinâmico. Muitos sites modernos utilizam estruturas de JavaScript, o que significa que o HTML inicial servido pode não conter todas as informações de que você precisa. Por exemplo, ao raspar um site de comércio eletrônico popular como Amazon, o HTML inicial pode incluir apenas elementos de layout básicos, enquanto os detalhes do produto, avaliações e preços são carregados de forma assíncrona. Se seu script Cheerio for executado antes que todo o JavaScript seja executado, você pode acabar com dados incompletos.

Outro desafio é limitação de taxa e bloqueio de IP. Os sites geralmente monitoram o tráfego de entrada e podem bloquear ou restringir solicitações que excedem um determinado limite. Por exemplo, um site como eBay pode permitir apenas um número limitado de solicitações por minuto de um único endereço IP. Se seu script de raspagem enviar solicitações muito rapidamente, você pode receber respostas HTTP 403 Forbidden, interrompendo efetivamente seus esforços de extração de dados. Para superar isso, considere implementar a limitação em seu script, adicionar atrasos entre as solicitações ou usar proxies rotativos para distribuir a carga.

Compreendendo e resolvendo proativamente esses desafios comuns, você pode aprimorar seus projetos de raspagem da Web usando o Cheerio, garantindo um processo de extração de dados mais eficiente e bem-sucedido.

Está tendo problemas com os desafios de raspagem da Web e bloqueios constantes no projeto em que está trabalhando?

Considere usar Scrapeless para tornar a extração de dados fácil e eficiente, tudo em uma ferramenta poderosa.

Experimente gratuitamente hoje!

Tratamento de erros

Problemas de rede ou alterações inesperadas na página podem causar erros. Use blocos try-catch para lidar com isso com elegância:

javascript Copy
try {
    // Seu código de raspagem aqui
} catch (error) {
    console.error('Erro ao raspar dados:', error);
}

8. Melhores práticas para usar o Cheerio na raspagem da Web

Para garantir uma raspagem da Web eficiente e compatível com o Cheerio, tenha o seguinte em mente:

  • Alvo específico de elementos: Use seletores precisos para reduzir o tempo de análise.
  • Lidar com casos de borda: Esteja preparado para alterações na estrutura HTML.
  • Respeite as políticas do site: Raspe apenas quando permitido e respeite as políticas de uso.
  • Otimizar solicitações: Use cabeçalhos de solicitação e gerenciamento de sessão para reduzir o risco de detecção.

Conclusão

Cheerio é uma ferramenta poderosa para analisar HTML e raspar páginas da Web estáticas. Sua flexibilidade, eficiência e sintaxe fácil de aprender o tornam perfeito para várias tarefas de raspagem. Seguindo as melhores práticas e considerando diretrizes éticas e técnicas, você pode usar o Cheerio para coletar dados significativos de sites de forma eficaz.

Seja para pesquisa, análise de SEO ou insights competitivos, o Cheerio pode lidar com uma ampla gama de necessidades de raspagem da Web. Lembre-se apenas de raspar de forma responsável e mantenha seus scripts adaptáveis para lidar com alterações dinâmicas nas estruturas HTML.

Na Scrapeless, acessamos apenas dados disponíveis publicamente, cumprindo rigorosamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve quaisquer atividades ilegais ou infratoras. Não oferecemos garantias e nos isentamos de qualquer responsabilidade pelo uso de informações deste blog ou de links de terceiros. Antes de se envolver em qualquer atividade de scraping, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.

Artigos mais populares

Catálogo