O que é Puppeteer e como usar na raspagem de dados | Guia Completo 2024
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
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
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
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.
-
Usando o Método
evaluate
O método
evaluate
executa código JavaScript no contexto do navegador para extrair os dados necessários.javascriptconst 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(); })();
-
Usando o Método
$eval
O método
$eval
seleciona um único elemento e extrai seu conteúdo.javascriptconst 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(); })();
-
Usando o Método
$$eval
O método
$$eval
seleciona vários elementos de uma vez e extrai seus conteúdos.javascriptconst 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(); })();
-
Usando os Métodos
page.$
eevaluate
O método
page.$
seleciona elementos e o métodoevaluate
executa código JavaScript no contexto do navegador para extrair dados.javascriptconst 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
Como Resolver CAPTCHA com Selenium e Node.js ao Fazer Scraping
Se você está enfrentando problemas contínuos com CAPTCHAs em seus esforços de scraping, considere usar algumas ferramentas e suas tecnologias avançadas para garantir uma solução confiável.
Adélia Cruz
15-Oct-2024
Scrapy vs. Selenium: Qual é o Melhor para o Seu Projeto de Web Scraping
Descubra os pontos fortes e as diferenças entre Scrapy e Selenium para web scraping. Aprenda qual ferramenta é mais adequada para o seu projeto e como lidar com desafios como CAPTCHAs.
Aloísio Vítor
25-Jul-2024
API vs. Scraping: a melhor maneira de obter os dados
Entenda as diferenças, os prós e os contras do Web Scraping e do API Scraping para escolher o melhor método de coleta de dados. Explore o CapSolver para obter soluções para desafios de bots.
Adélia Cruz
16-Jul-2024
Como resolver o CAPTCHA com o Selenium C#
Como resolver o CAPTCHA com o Selenium C#
Aloísio Vítor
11-Jul-2024
O que é Puppeteer e como usar na raspagem de dados | Guia Completo 2024
Este guia completo abordará o que é o Puppeteer e como utilizá-lo eficazmente na raspagem de dados da web.
Adélia Cruz
10-Jul-2024
O que é Web Scraping | Casos de Uso Comuns e Problemas
Conheça o web scraping: aprenda seus benefícios, enfrente os desafios com facilidade e impulsione seus negócios com o CapSolver.
Adélia Cruz
05-Jul-2024