¿Cómo raspar un sitio web usando Puppeteer en Node.js?

Puppeteer es una biblioteca de Node.js que proporciona una API de alto nivel para controlar Chrome o Chromium sin interfaz gráfica a través del protocolo DevTools. Permite la automatización, prueba y raspado de páginas web en un navegador headless/headful.

Instalación de Titiritero: Para usar titiritero, debe tener instalado Node.js. Luego, Puppeteer se puede instalar en la línea de comando usando el administrador de paquetes npm.

npm install puppeteer

Uso de Puppeteer: la biblioteca de Puppeteer se puede importar en su secuencia de comandos usando:

const puppeteer = require('puppeteer');

Es importante recordar que Puppeteer es una biblioteca basada en promesas que realiza llamadas asincrónicas a la instancia de Chrome sin cabeza. Por lo tanto, lo envolvemos en un contenedor asíncrono. Esto significa que el código se ejecuta inmediatamente.

Aquí hay un ejemplo simple para tomar una captura de pantalla de una página:

Javascript

import Puppeteer
const puppeteer = require('puppeteer');
 
(async () => {
    const browser = await puppeteer.launch();
     
    // Open new page in headless browser
    const page = await browser.newPage();
     
    // To visit page in browser
    await page.goto('https://scrapethissite.com');
     
    // Save Screenshot at Path
    await page.screenshot({path: 'screenshot.png'});
   
      // Close our browser instance
    await browser.close();
  })();

Ejecutando su código: guarde su código como un archivo JavaScript y ejecútelo en la línea de comando usando el siguiente comando :

node filename.js

Ejemplo: el siguiente código devuelve un objeto con el nombre del equipo de hockey de la NHL y las victorias de ese año,

Javascript

const puppeteer = require('puppeteer');
 
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://scrapethissite.com/pages/forms/');
 
    const textsArray = await page.evaluate(
        () => [...document.querySelectorAll(
            '#hockey > div > table > tbody > tr > td.name')]
            .map(elem => elem.innerText)
    );
    const WinArray = await page.evaluate(
        () => [...document.querySelectorAll(
            '#hockey > div > table > tbody > tr > td.wins')]
            .map(elem => elem.innerText)
    );
    var result = {};
    textsArray.forEach((textsArray, i) =>
        result[textsArray] = WinArray[i]);
    console.log(result);
    await browser.close();
})();

Producción:

{ ‘Boston Bruins’: ’36’, ‘Buffalo Sabres’: ’31’, ‘Calgary Flames’: ’31’, ‘Chicago Blackhawks’: ’36’, 
‘Detroit Red Wings’: ’34’, ‘Edmonton Oilers ‘: ’37’, ‘Hartford Whalers’: ’31’, ‘Los Angeles Kings’: ’46’, 
‘Minnesota North Stars’: ’27’, ‘Montreal Canadiens’: ’39’, ‘New Jersey Devils’: ’32’, ‘Isleños de Nueva York’: ’25’, 
‘Rangers de Nueva York’: ’36’, ‘Philadelphia Flyers’: ’33’, ‘Pittsburgh Penguins’: ’41’, ‘Quebec Nordiques’: ’16’ , 
‘St. Louis Blues’: ’47’, ‘Toronto Maple Leafs’: ’23’, ‘Vancouver Canucks’: ’28’, ‘Washington Capitals’: ’37’, 
‘Winnipeg Jets’: ’26’}

Publicación traducida automáticamente

Artículo escrito por prakharalt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *