CAPSOLVER
Blog
O que é Puppeteer e como usar na raspagem de dados | Guia Completo 2024

O que é Puppeteer e como usar na raspagem de dados | Guia Completo 2024

Logo of CapSolver

Adélia Cruz

Neural Network Developer

10-Jul-2024

A raspagem de dados tornou-se uma habilidade crucial para qualquer pessoa que lida com extração de dados da web. Se você é um desenvolvedor, cientista de dados ou entusiasta procurando reunir informações de sites, o Puppeteer é uma das ferramentas mais poderosas à sua disposição. Este guia completo irá explorar o que é o Puppeteer e como utilizá-lo efetivamente na raspagem de dados da web.

Introdução ao Puppeteer

O Puppeteer é uma biblioteca Node que fornece uma API de alto nível para controlar o Chrome ou o Chromium através do Protocolo DevTools. É mantido pela equipe do Google Chrome e oferece aos desenvolvedores a capacidade de realizar uma variedade de tarefas do navegador, como gerar capturas de tela, raspar websites e, mais importante, fazer raspagem de dados da web. O Puppeteer é altamente popular devido às suas capacidades de navegação sem interface gráfica, o que o torna ideal para tarefas automatizadas.

Lutando com falhas repetidas na resolução completa do irritante captcha? Descubra a resolução automática e sem problemas de captchas com a tecnologia AI-powered Auto Web Unblock do CapSolver!

Reivindique seu Código de Bônus para as principais soluções de captcha; CapSolver: WEBS. Depois de resgatá-lo, você receberá um bônus extra de 5% após cada recarga, ilimitado.

Por que usar o Puppeteer para raspagem de dados?

Axios e Cheerio são ótimas escolhas para raspagem de dados em JavaScript, mas têm limitações: lidar com conteúdo dinâmico e contornar mecanismos anti-raspagem.

Como um navegador sem cabeça, o Puppeteer se destaca na raspagem de conteúdo dinâmico. Ele carrega completamente a página-alvo, executa JavaScript e pode até mesmo disparar solicitações XHR para recuperar dados adicionais. Isso é algo que raspadores estáticos não conseguem alcançar, especialmente com Aplicações de Página Única (SPAs) onde o HTML inicial não contém dados significativos.

O que mais o Puppeteer pode fazer? Ele pode renderizar imagens, capturar screenshots e tem uma extensão para resolver vários captchas como reCAPTCHA, captcha, captcha. Por exemplo, você pode programar seu script para navegar por uma página, tirar screenshots em intervalos específicos e analisar essas imagens para obter insights competitivos. As possibilidades são praticamente ilimitadas!

Uso Simples do Puppeteer

Nós já completamos a primeira parte do ScrapingClub usando Selenium e Python. Agora, vamos usar o Puppeteer para completar a segunda parte.

Antes de começarmos, certifique-se de ter o Puppeteer instalado em sua máquina local. Se ainda não tiver, você pode instalá-lo usando os seguintes comandos:

bash Copy
npm i puppeteer # Faz o download do Chrome compatível durante a instalação.
npm i puppeteer-core # Alternativamente, instala como uma biblioteca, sem fazer o download do Chrome.

Acessando uma Página da Web

javascript Copy
const puppeteer = require('puppeteer');

(async function() {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    await page.goto('https://scrapingclub.com/exercise/detail_json/');

    // Pausa por 5 segundos
    await new Promise(r => setTimeout(r, 5000));
    await browser.close();
})();

O método puppeteer.launch é usado para iniciar uma nova instância do Puppeteer e pode aceitar um objeto de configuração com várias opções. O mais comum é headless, que especifica se o navegador deve ser executado no modo sem cabeça. Se você não especificar este parâmetro, ele será padrão para true. Outras opções comuns de configuração são as seguintes:

Parâmetro Tipo Valor Padrão Descrição Exemplo
args string[] Array de argumentos da linha de comando para passar ao iniciar o navegador args: ['--no-sandbox', '--disable-setuid-sandbox']
debuggingPort number Especifica a porta de depuração a ser usada debuggingPort: 8888
defaultViewport dict {width: 800, height: 600} Define o tamanho padrão da viewport defaultViewport: {width: 1920, height: 1080}
devtools boolean false Se deve abrir automaticamente o DevTools devtools: true
executablePath string Especifica o caminho para o executável do navegador executablePath: '/path/to/chrome'
headless boolean ou 'shell' true Se deve executar o navegador no modo sem cabeça headless: false
userDataDir string Especifica o caminho para o diretório de dados do usuário userDataDir: '/path/to/user/data'
timeout number 30000 Tempo limite em milissegundos para aguardar o navegador iniciar timeout: 60000
ignoreHTTPSErrors boolean false Se deve ignorar erros HTTPS ignoreHTTPSErrors: true

Configurando o Tamanho da Janela

Para obter a melhor experiência de navegação, precisamos ajustar dois parâmetros: o tamanho da viewport e o tamanho da janela do navegador. O código é o seguinte:

javascript Copy
const puppeteer = require('puppeteer');

(async function() {
    const browser = await puppeteer.launch({
        headless: false,
        args: ['--window-size=1920,1080']
    });
    const page = await browser.newPage();
    await page.setViewport({width: 1920, height: 1080});
    await page.goto('https://scrapingclub.com/exercise/detail_json/');

    // Pausa por 5 segundos
    await new Promise(r => setTimeout(r, 5000));
    await browser.close();
})();

Extraindo Dados

No Puppeteer, existem vários métodos para extrair dados.

  1. Usando o Método evaluate

    O método evaluate executa código JavaScript no contexto do navegador para extrair os dados necessários.

    javascript Copy
    const puppeteer = require('puppeteer');
    
    (async function () {
        const browser = await puppeteer.launch({
            headless: false,
            args: ['--window-size=1920,1080']
        });
        const page = await browser.newPage();
        await page.setViewport({width: 1920, height: 1080});
        await page.goto('https://scrapingclub.com/exercise/detail_json/');
    
        const data = await page.evaluate(() => {
            const image = document.querySelector('.card-img-top').src;
            const title = document.querySelector('.card-title').innerText;
            const price = document.querySelector('.card-price').innerText;
            const description = document.querySelector('.card-description').innerText;
            return {image, title, price, description};
        });
    
        console.log('Nome do produto:', data.title);
        console.log('Preço do produto:', data.price);
        console.log('Imagem do produto:', data.image);
        console.log('Descrição do produto:', data.description);
    
        // Pausa por 5 segundos
        await new Promise(r => setTimeout(r, 5000));
        await browser.close();
    })();
  2. Usando o Método $eval

    O método $eval seleciona um único elemento e extrai seu conteúdo.

    javascript Copy
    const puppeteer = require('puppeteer');
    
    (async function () {
        const browser = await puppeteer.launch({
            headless: false,
            args: ['--window-size=1920,1080']
        });
        const page = await browser.newPage();
        await page.setViewport({width: 1920, height: 1080});
        await page.goto('https://scrapingclub.com/exercise/detail_json/');
    
        const title = await page.$eval('.card-title', el => el.innerText);
        const price = await page.$eval('.card-price', el => el.innerText);
        const image = await page.$eval('.card-img-top', el => el.src);
        const description = await page.$eval('.card-description', el => el.innerText);
    
        console.log('Nome do produto:', title);
        console.log('Preço do produto:', price);
        console.log('Imagem do produto:', image);
        console.log('Descrição do produto:', description);
    
        // Pausa por 5 segundos
        await new Promise(r => setTimeout(r, 5000));
        await browser.close();
    })();
  3. Usando o Método $$eval

    O método $$eval seleciona vários elementos de uma vez e extrai seus conteúdos.

    javascript Copy
    const puppeteer = require('puppeteer');
    
    (async function () {
        const browser = await puppeteer.launch({
            headless: false,
            args: ['--window-size=1920,1080']
        });
        const page = await browser.newPage();
        await page.setViewport({width: 1920, height: 1080});
        await page.goto('https://scrapingclub.com/exercise/detail_json/');
    
        const data = await page.$$eval('.my-8.w-full.rounded.border > *', elements => {
            const image = elements[0].querySelector('img').src;
            const title = elements[1].querySelector('.card-title').innerText;
            const price = elements[1].querySelector('.card-price').innerText;
            const description = elements[1].querySelector('.card-description').innerText;
            return {image, title, price, description};
        });
    
        console.log('Nome do produto:', data.title);
        console.log('Preço do produto:', data.price);
        console.log('Imagem do produto:', data.image);
        console.log('Descrição do produto:', data.description);
    
        // Pausa por 5 segundos
        await new Promise(r => setTimeout(r, 5000));
        await browser.close();
    })();
  4. Usando os Métodos page.$ e evaluate

    O método page.$ seleciona elementos e o método evaluate executa código JavaScript no contexto do navegador para extrair dados.

    javascript Copy
    const puppeteer = require('puppeteer');
    
    (async function () {
        const browser = await puppeteer.launch({
            headless: false,
            args: ['--window-size=1920,1080']
        });
        const page = await browser.newPage();
        await page.setViewport({width: 1920, height: 1080});
        await page.goto('https://scrapingclub.com/exercise/detail_json/');
    
        const imageElement = await page.$('.card-img-top');
        const titleElement = await page.$('.card-title');
        const priceElement = await page.$('.card-price');
        const descriptionElement = await page.$('.card-description');
        const image = await page.evaluate(el => el.src, imageElement);
        const title = await page.evaluate(el => el.innerText, titleElement);
        const price = await page.evaluate(el => el.innerText, priceElement);
        const description = await page.evaluate(el => el.innerText, descriptionElement);
    
        console.log('Nome do produto:', title);
        console.log('Preço do produto:', price);
        console.log('Imagem do produto:', image);
        console.log('Descrição do produto:', description);
    
        // Pausa por 5 segundos
        await new Promise(r => setTimeout(r, 5000));
        await browser.close();
    })();

Contornando Proteções Anti-Raspagem

Completar os exercícios do ScrapingClub é relativamente simples. No entanto, em cenários reais de raspagem de dados, obter informações nem sempre é tão fácil. Alguns sites utilizam tecnologias anti-raspagem que podem detectar seu script como um bot e bloqueá-lo. A situação mais comum envolve desafios CAPTCHA, como captcha, captcha, recaptcha, captcha e captcha.

Para resolver esses desafios CAPTCHA, é necessário ter experiência extensiva em aprendizado de máquina, engenharia reversa e contramedidas de impressão digital do navegador, o que pode consumir uma quantidade significativa de tempo.

Felizmente, você não precisa mais lidar com todo esse trabalho sozinho. O CapSolver oferece uma solução abrangente que ajuda você a resolver facilmente todos os desafios. O CapSolver oferece uma extensão para navegador que permite resolver automaticamente desafios CAPTCHA enquanto usa o Puppeteer para raspagem de dados. Além disso, ele fornece um método de API para resolver CAPTCHAs e obter tokens. Tudo isso pode ser feito em apenas alguns segundos. Confira este documento para descobrir como resolver os vários desafios CAPTCHA que você encontrar!

Conclusão

A raspagem de dados é uma habilidade inestimável para qualquer pessoa envolvida na extração de dados da web e o Puppeteer, como uma ferramenta com uma API avançada e recursos poderosos, é uma das melhores escolhas para alcançar esse objetivo. Sua capacidade de lidar com conteúdo dinâmico e resolver mecanismos anti-raspagem o destaca entre as ferramentas de raspagem disponíveis.

Neste guia, exploramos o que é o Puppeteer, suas vantagens na raspagem de dados da web e como configurá-lo e utilizá-lo de forma eficaz. Demonstramos com exemplos como acessar páginas da web, configurar tamanhos de viewport e extrair dados usando diversos métodos. Além disso, discutimos os desafios impostos por tecnologias anti-raspagem e como o CapSolver oferece uma solução poderosa para o desafio CAPTCHA.

Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.

Mais