MundoJSnode.jsWeb Scraping com Puppeteer: Blueprint para Dados Precisos

Web Scraping com Puppeteer: Blueprint para Dados Precisos

Aprenda a fazer web scraping com Node.js e Puppeteer neste guia completo. Descubra como utilizar headless browsers para extrair dados de páginas dinâmicas, lidar com JavaScript, e automatizar interações com websites de forma eficiente.

-

Eleve seu desenvolvimento com o Cursor

Eu utilizo o Cursor diariamente para acelerar meu fluxo. Use meu link e garanta 50% de desconto no seu primeiro mês dos planos Pro, Pro+ ou Ultra.

Resgatar meu desconto * Apenas para novos usuários

Neste tutorial, mostramos como configurar o Puppeteer, executar tarefas de scraping em sites complexos, e evitar bloqueios de bots com hacks e boas práticas. Ideal para desenvolvedores que buscam extrair dados web com precisão e fidelidade usando uma das ferramentas mais poderosas do Node.js.

Ah, o web scraping! Desde os tempos mais remotos da internet (ou, pelo menos, desde 2010, quando eu mesmo comecei a criar meus primeiros robôs), ele tem sido o sonho de consumo de desenvolvedores e empresas. Quem nunca se viu na necessidade quase heróica — ou desesperada — de coletar dados com a precisão cirúrgica de um bisturi?

Um Scraper Incompleto — E a Necessidade de um Novo Ato

Se você seguiu meu tutorial anterior (deletei, estava muito ruim e não mais funcional), provavelmente já enfrentou alguns percalços. Afinal, o web scraping básico que apresentei é como um cavaleiro medieval que vai à guerra apenas com uma adaga: nobre, corajoso, mas fadado à derrota (entende o motivo de ter apagado?). O problema é que muitas páginas hoje são dinâmicas, cheias de JavaScript que se desenrola em tempo real, moldando o HTML enquanto você tenta, em vão, capturar algo que nem sequer está lá ainda.

Dica de Leitura: Agora que você está mergulhado no mundo do web scraping com Puppeteer, é importante lembrar que a manutenção e a qualidade do seu código são fundamentais para o sucesso a longo prazo. Se você está trabalhando com projetos Node.js, especialmente aqueles que envolvem web scraping, é crucial garantir que seu código seja sólido e fácil de manter. Para isso, configure o SonarQube para analisar e melhorar a qualidade do seu código Node.js.

Imagine, leitor, a desilusão do pobre desenvolvedor, que vê um HTML na tela do navegador, mas que, ao rodar seu scraper, recebe… nada. Absolutamente nada. A página, aquela ingrata, escondeu o ouro nas profundezas de seus scripts. Nosso bravo scraper, no entanto, é como um leitor ingênuo que tenta decifrar “Dom Casmurro” sem entender a malícia de Capitu: ele jamais verá o que está nas entrelinhas.

Mas não temamos! Para todo problema existe uma solução, e é aí que entra o headless browser — aquele navegador que, como um bom espião, faz tudo o que um navegador comum faz, mas sem que você o veja. É como se ele fosse um espectador invisível no teatro da web, assistindo à peça inteira enquanto o pobre HTML estático morre de tédio.

O Incomparável Poder do Puppeteer

Como todo bom protagonista, precisamos de um aliado à altura. E o nome dele é Puppeteer. Ah, o Puppeteer… Não pensem vocês que ele é um simples navegador sem cabeça. Longe disso! Ele é o artista invisível que executa com perfeição cada script, cada detalhe, como se fosse o maestro de uma grande sinfonia.

Diferente de outros “browsers sem rosto”, o Puppeteer tem a graça de usar o Chrome, esse ícone da modernidade digital, em modo headless, ou seja, sem interface gráfica. Ele faz todo o trabalho pesado, como um empregado discreto que resolve seus problemas enquanto você aproveita o lado bom da vida. O Chrome, em sua plenitude silenciosa, renderiza páginas e executa scripts como um ator que não erra uma linha.

Se antes eu sofria com ferramentas como PhantomJS, que me deixavam na mão, o Puppeteer apareceu como o salvador da pátria. Imagine o alívio! Ele roda o JavaScript da página, carrega o DOM completo, e faz tudo isso sem a inconveniência de uma janela de navegador piscando na sua cara.

Preparando o Cenário: Instalando Puppeteer

Agora, caro leitor, se você é desses que gosta de colocar a mão na massa — porque em teoria tudo parece fácil, mas a prática exige suor —, vamos ver como configurar o Puppeteer. Primeiro, tenha certeza de que você já tem o Node.js instalado. Se não tiver, está perdendo o bonde da história! Após isso, vamos criar o projeto e instalar o Puppeteer:

npm init -y
npm install puppeteer

Em seguida, vamos escrever o esqueleto do nosso scraper. Veja que é simples, quase poético, como as palavras de um romancista ao descrever a cena:

const puppeteer = require('puppeteer');

async function scrap() {
const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto('http://books.toscrape.com/');
await page.waitForNetworkIdle();

const result = await page.evaluate(() => {
const books = [];
document.querySelectorAll('h3 > a').forEach(book => books.push(book.title));
return books;
});

await browser.close();
console.log(result);
}

scrap();

Aqui, invocamos o Puppeteer e ele, como um mago, lança o Chrome em modo headless, acessa a página e espera que todos os scripts e requisições se acalmem, como um público que aguarda o fim do espetáculo antes de aplaudir. Em seguida, coletamos os títulos dos livros. Simples, direto, sem enrolações.

Rasgando o Véu da Paginação

Mas você há de me perguntar: e quando a página tem paginação? Ah, jovem padawan, aí o jogo fica interessante! Um web scraper digno desse nome precisa navegar entre páginas como um detetive que segue as pistas de um caso complicado.

Vamos fazer isso no exemplo do Books to Scrape, onde cada página exibe uma lista de livros e um botão “next” para passar à página seguinte. Veja como nosso Puppeteer, sempre diligente, faz o trabalho:

async function scrap() {
    const browser = await puppeteer.launch({ headless: "new" });
    const page = await browser.newPage();
    await page.goto('http://books.toscrape.com/');
    await page.waitForNetworkIdle();

    let hasNextPage = true;
    const allBooks = [];

    while (hasNextPage) {
        const booksOnPage = await page.evaluate(() => {
            const books = [];
            document.querySelectorAll('h3 > a').forEach(book => books.push(book.title));
            return books;
        });
        allBooks.push(...booksOnPage);

        // Verifica se existe uma próxima página
        hasNextPage = await page.evaluate(() => {
            const nextButton = document.querySelector('.next > a');
            return !!nextButton;
        });

        if (hasNextPage) {
            await Promise.all([
                page.click('.next > a'),
                page.waitForNetworkIdle(),
            ]);
        }
    }

    await browser.close();
    console.log(allBooks);
}

Conclusão: Um Final Feliz?

Nem sempre, meu caro leitor. No mundo do web scraping, o final feliz depende de muitas variáveis: o servidor pode bloqueá-lo, o site pode mudar sua estrutura, ou o JavaScript pode se rebelar como um personagem trágico que decide mudar o rumo da história. Mas com Puppeteer, você estará mais preparado do que nunca para enfrentar esses desafios e criar scrapers que capturam dados com maestria.

Por hoje, deixo aqui a promessa de que o web scraping com Node.js e Puppeteer é um caminho sem volta, mas daqueles que vale a pena trilhar. Até a próxima, e boa sorte nas suas aventuras digitais!

Antes de encerrar, meu estimado leitor, vou lhe poupar alguns tropeços pelo caminho — afinal, não quero que sua jornada com o Puppeteer e Node.js termine como uma peça de teatro mal ensaiada. Aqui vão alguns hacks e atalhos valiosos para otimizar seu trabalho e garantir que seu web scraper opere com a eficiência de um mestre dos bastidores.

english-interview-debugger.sh
$ grep -r "senior_dev_communication" ./career
[CRITICAL_ERROR] Código sênior detectado, mas fluência falhou no runtime.
Motivo: Travou na hora de explicar a arquitetura (System Design) em inglês para o gringo.

O mercado internacional não quer um robô de gramática. Quer um dev que saiba defender uma tomada de decisão técnica sob pressão. Destrave sua conversão na Preply com aulas particulares focadas em TI.

$ ./fix-english.sh --target=remote-job
Achar Professor Particular ➔

Hacks para Puppeteer

  1. Use waitForSelector para Garantir a Existência de Elementos
    • Ao invés de esperar cegamente que a página esteja pronta, use await page.waitForSelector('.classe-do-seletor'). Isso garante que seu scraper só avance quando o elemento que você quer manipular estiver disponível. Menos chance de erros, mais precisão!
await page.waitForSelector('h3 > a');

Manipule Cookies para Contornar Bloqueios

  • Alguns sites podem tentar bloquear scrapers por meio de verificações repetidas de IP. Manipular cookies e sessões pode ajudar seu bot a se passar por um usuário real, evitando o bloqueio.
const cookies = await page.cookies();
await page.setCookie(...cookies);

Cuidado com o Consumo de Memória

  • Puppeteer pode ser uma fera faminta por memória. Abra o navegador em modo headless, mas feche as abas que não estão sendo usadas. Você pode usar browser.newPage() com moderação e fechar abas antigas com page.close().

Automatize Tarefas com evaluate()

  • O page.evaluate() é um canivete suíço. Use-o para rodar JavaScript diretamente no contexto da página que você está raspando. Ele pode clicar em botões, preencher formulários e até fazer scroll automático, como um assistente que trabalha sem parar nos bastidores.
await page.evaluate(() => {
    document.querySelector('input[name="search"]').value = 'Node.js';
    document.querySelector('button[type="submit"]').click();
});

Defina User-Agents Diferentes para Evitar Detecção

  • Mude seu User-Agent regularmente para evitar que seu scraper seja identificado como um bot. Isso é especialmente útil para sites que detectam e bloqueiam scrapers com base em padrões de comportamento.
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

Use setViewport() para Simular Resoluções de Tela

  • Quer que seu scraper se passe por um usuário móvel? Ajuste a resolução com setViewport() para simular diferentes dispositivos.
await page.setViewport({ width: 1280, height: 800 });

Links Úteis

Agora, para aqueles que desejam se aprofundar nesse fascinante mundo de Puppeteer e Node.js, seguem alguns recursos essenciais para aprender mais e aprimorar suas habilidades:

Com esses recursos em mãos, você estará mais do que preparado para enfrentar o cenário caótico da web e seus desafios, enquanto continua refinando suas habilidades em Node.js e web scraping.


✦ Recomendação do Editor

Eleve o seu nível no assunto

Se você está procurando aprender mais sobre técnicas avançadas de web scraping após ler nosso artigo sobre a importância do headless browser em projetos Node.js, eu recomendo procurar por livros de especialistas em web scraping com Puppeteer.

Com livros de especialistas em web scraping, você obterá uma visão mais completa e profunda sobre como aproveitar ao máximo a potência do Puppeteer para extrair dados web com precisão e eficiência. Além disso, você aprenderá como evitar bloqueios de bots e melhorar a qualidade do seu código, o que é fundamental para o sucesso de seus projetos Node.js, especialmente os que envolvem web scraping.



Ver ofertas em destaque na Amazon


Ajude a manter este projeto, a Ramos da Informática pode ganhar uma comissão sobre as vendas qualificadas.
Ramos da Informática
JS TS IA

Pesquisa: Como você está usando IA na sua rotina Dev?

Responda em menos de 2 minutos e ajude a direcionar nossos próximos artigos técnicos, guias e conteúdos.

Responder Pesquisa →
Ramos Souza J
Ramos Souza Jhttps://ramosdainformatica.com.br/sobre/
Ramos de Souza Janones é Senior FullStack Engineer na ReDraw, com mais de 26 anos de trajetória no desenvolvimento de software. Especialista em arquiteturas escaláveis com React e TypeScript, sua jornada percorreu desde o Clipper até o ecossistema moderno de IA e microsserviços. Com passagens por grandes players como Wipro (Bradesco PIX), Ramos também atuou na Fiocruz em um projeto estratégico para o Ministério da Saúde, desenvolvendo o sistema de acompanhamento da saúde da mulher para a prevenção do câncer de colo, do monitoramento na infância à maturidade. Unindo visão técnica profunda, liderança e foco em performance, ele é o criador do portal Ramos da Informática, onde compartilha conhecimento sobre desenvolvimento Full Stack e as tendências de IA aplicadas à engenharia de software.

Mais recentes

Sincronizando PostgreSQL e Turbopuffer com Puffgres

Guia Definitivo: Sincronizando PostgreSQL e Turbopuffer com Puffgres para Buscas Vetoriais Avançadas A integração de inteligência artificial em aplicações modernas...

3 Técnicas para Reduzir Consumo de Tokens no Claude Code e Codex

Aprenda 3 técnicas eficientes para reduzir o consumo de tokens no Claude Code e Codex. Otimize custos, melhore a...

Entenda Componentes de Cache no Next.js

O modelo de cache do Next.js 16 por trás das Navegações Instantâneas. Aprenda a usar use cache, cacheLife e...

Grok 4.5: mais rápido e integrado ao Cursor

O laboratório de IA de Elon Musk, agora com nova identidade visual, acaba de dar mais um passo à...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Cloudflare Monetization Gateway Está Redefinindo a Economia da IA

Cloudflare lança o Cloudflare Monetization Gateway que permite cobrar por APIs, dados e sites via micropagamentos em stablecoins. O...

Configuração do GLM-5.2 no Cursor via OpenRouter

Descubra o GLM-5.2, o novo modelo de pesos abertos que rivaliza com GPT-5.5 em tarefas agênticas. Aprenda a configurar...

Mais Lidos

Como Lançar e Financiar a sua Startup

Tem uma ideia para um software ou loja virtual? Descubra como programas de inovação em negócios, como o Sebraetec, ajudam desenvolvedores a validar MVPs e escalar startups tecnológicas.

IA no Terminal: Automatize Flows de Trabalho com Gemini CLI

Google acaba de lançar o Gemini CLI, uma ferramenta...

Assistente IA em Raspberry Pi: O PicoClaw na Prática

Neste artigo conheça o PicoClaw: Assistente IA em Raspberry Pi:...

IA no Brasil: O Futuro do Trabalho em Escala

A inteligência artificial (IA) está transformando o mercado de...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Recursos da Comunidade

Carreira Internacional

JOB NA GRINGA

Meta de Salário Remoto
U$ 5.000/mês

O mapa completo para programadores do Brasil conquistarem contratos internacionais e mudarem de vida financeira.

  • Vagas exclusivas semanais: Membros acessam vagas com 7 dias de antecedência.
  • Workshops e lives gravadas: Buscar vagas não é óbvio. Nós te mostraremos como.
  • 498 Portais de vagas: Que contratam Brasileiros direto na sua dashboard.
  • Mentorias com Recrutadores: Encontros semanais ao vivo com Erika Linares.
  • Inglês diário com foco em conversação: Treine para entrevistas num ambiente sem julgamentos.
  • Suporte pós-contratação: Contabilidade e recebimento legal com a menor taxa.
Garantir Minha Vaga

Inscrição segura via Hotmart

Você vai gostarrelacionados
Continue aprendendo

E-Zine Dev Ramos

Quer dominar arquitetura e IA?

Junte-se a +10.000 profissionais. Receba semanalmente estratégias de Node.js, React e IA que nunca publicamos no blog.

Assinar Gratuitamente Zero spam. Cancele quando quiser.