Volver al blog
Guías
Sergiu InizianLast updated on Mar 31, 202610 min read

Cheerio vs Puppeteer: guía para elegir la mejor herramienta de web scraping

Cheerio vs Puppeteer: guía para elegir la mejor herramienta de web scraping

¿Estás tratando de decidir qué herramienta utilizar para el web scraping? Puede resultar complicado elegir entre todas las opciones disponibles, pero no te preocupes: estoy aquí para ayudarte. En este artículo, analizaremos en profundidad Cheerio y Puppeteer, dos herramientas muy populares para el web scraping.

Cheerio es una biblioteca para analizar y manipular documentos HTML, mientras que Puppeteer es una biblioteca para controlar un navegador Chrome sin interfaz gráfica. Cheerio te permite seleccionar elementos utilizando una sintaxis similar a la de jQuery, mientras que Puppeteer se puede utilizar para tareas como el web scraping, las pruebas y la automatización del envío de formularios.

¡Pues vamos a ponernos manos a la obra!

¿Qué es Cheerio?

Cheerio es una biblioteca de JavaScript que analiza y manipula documentos HTML y te permite seleccionar, modificar y realizar acciones sobre elementos dentro de un documento utilizando una sintaxis similar a la de jQuery.

Cheerio es ligera y fácil de usar, lo que la convierte en una buena opción para tareas sencillas de web scraping. Además, es más rápida que utilizar un navegador completo como Chrome o Firefox, ya que no tiene que cargar todos los activos y recursos. Esto la hace ideal para extraer datos de un documento HTML.

Cheerio tiene muchas características y ventajas que lo convierten en una opción popular para el web scraping. Algunas de las principales características y ventajas de Cheerio son:

  • Ligero y fácil de usar: Cheerio está diseñado para ser ligero y fácil de usar, lo que lo convierte en una excelente opción para tareas sencillas de web scraping. Su sintaxis es similar a la de jQuery, con la que muchos desarrolladores están familiarizados, y permite seleccionar y manipular elementos en un documento HTML con solo unas pocas líneas de código.
  • Rápido: Cheerio es más rápido que utilizar un navegador completo para el web scraping, ya que no tiene que cargar todos los activos y recursos que cargaría un navegador. Esto lo convierte en una buena opción para tareas en las que la velocidad es importante.
  • Compatibilidad con documentos HTML y XML: Cheerio puede analizar y manipular tanto documentos HTML como XML, lo que te ofrece la flexibilidad de trabajar con diferentes tipos de documentos según sea necesario.
  • Se puede utilizar en combinación con otras herramientas: Cheerio se puede utilizar junto con otras herramientas, como la API Fetch o Axios, para realizar tareas de web scraping. Esto te permite adaptar tu flujo de trabajo a tus necesidades específicas y utilizar las mejores herramientas para cada tarea.

¿Qué es Puppeteer?

Puppeteer es una biblioteca de Node.js que proporciona una API de alto nivel para controlar un navegador Chrome sin interfaz gráfica. Te permite automatizar tareas en Chrome sin necesidad de abrir una ventana de Chrome, lo que reduce la cantidad de recursos que consumirá tu scraper.

Puedes utilizar Puppeteer para realizar acciones como rellenar formularios, hacer clic en botones y extraer datos de sitios web.

Una de las principales ventajas de Puppeteer es que te permite interactuar con sitios web de una forma similar a como lo haría un usuario humano. Esto lo convierte en una buena opción para tareas que requieren interacciones más complejas con un sitio web, como iniciar sesión, navegar por las páginas y rellenar formularios.

Puppeteer cuenta con varias características y ventajas que lo convierten en una opción popular para el web scraping y la automatización. Algunas de las principales características y ventajas de Puppeteer incluyen:

  • API de alto nivel: Puppeteer ofrece una API de alto nivel que es fácil de usar y comprender. Esto lo convierte en una buena opción para desarrolladores que se inician en el web scraping o la automatización.
  • Control sobre un navegador Chrome sin interfaz gráfica: Puppeteer te permite controlar un navegador Chrome sin interfaz gráfica, lo que significa que puedes automatizar tareas en Chrome sin necesidad de abrir una ventana de Chrome. Esto lo convierte en una buena opción para tareas que requieren interacciones más complejas con un sitio web.
  • Imita el comportamiento humano: Puppeteer puede imitar el comportamiento humano, como hacer clic en botones, desplazarse por la página y rellenar formularios. Esto lo convierte en una buena opción para tareas que requieren interacciones más complejas con un sitio web.
  • Compatibilidad con funciones web modernas: Puppeteer es totalmente compatible con funciones web modernas como JavaScript, cookies y CAPTCHAs. Esto lo convierte en una buena opción para tareas que requieren estas funciones.
  • Se puede utilizar en combinación con otras herramientas: Puppeteer se puede utilizar en combinación con otras herramientas, como Cheerio, para realizar tareas de web scraping. Esto te permite adaptar tu flujo de trabajo a tus necesidades específicas y utilizar las mejores herramientas para el trabajo.

Diferencias entre Cheerio y Puppeteer

Cheerio y Puppeteer son herramientas populares para el web scraping, pero presentan algunas diferencias clave que las hacen más adecuadas para determinadas tareas. Estas son algunas de las principales diferencias entre Cheerio y Puppeteer:

  • Rendimiento: Cheerio suele ser más rápido que Puppeteer porque no tiene que cargar todos los activos y recursos que cargaría un navegador. Sin embargo, Puppeteer tiene la ventaja de poder interactuar con los sitios web de una manera similar a como lo haría un usuario humano, lo que puede hacerlo más rápido para ciertas tareas.
  • Funcionalidad: Cheerio es adecuado para tareas sencillas de web scraping que implican la extracción de datos de documentos HTML o XML. Puppeteer es más potente y puede automatizar tareas en un navegador Chrome sin interfaz gráfica, como iniciar sesión, navegar por páginas y rellenar formularios.
  • Facilidad de uso: Cheerio tiene una sintaxis similar a jQuery, con la que muchos desarrolladores están familiarizados. Esto hace que sea fácil de usar para quienes ya conocen jQuery. Puppeteer también cuenta con una API de alto nivel fácil de usar, pero requiere más instalación y configuración que Cheerio.

En general, la elección entre Cheerio y Puppeteer dependerá de las necesidades específicas de tu tarea de web scraping. Si solo necesitas extraer algunos datos de un documento HTML y el rendimiento es una preocupación, Cheerio podría ser la mejor opción. Si necesitas automatizar, Puppeteer es la elección correcta.

Comprobación o instalación de Node.JS

Antes de empezar, asegúrate de que Node.JS está instalado en tu equipo. La versión de Node utilizada en este artículo es la 18.9.0. Ejecuta este comando para comprobar tu versión local:

node -v

Si te aparece un error, descarga e instala Node.js desde la página web oficial. Esto también instalará `npm`, el gestor de paquetes para Node.js.

Configuración del proyecto

Abre el terminal y crea una nueva carpeta llamada `scraper`. Accede al directorio y ejecuta el comando npm init. Esto creará un archivo `package.json` para tu proyecto que contiene metadatos como el nombre, la versión y las dependencias.

Sigue las indicaciones para introducir la información sobre tu proyecto. Puedes pulsar `Enter` para aceptar los valores predeterminados en cada pantalla, o puedes introducir los valores que desees.

Ahora puedes empezar a instalar las dependencias y a crear archivos para tu proyecto:

npm install cheerio puppeteer

Las dependencias se instalarán en el directorio `node_modules` de tu proyecto y también se añadirán a la sección de dependencias de tu archivo `package.json`.

Definición de un objetivo

Para este artículo, extraeremos un artículo de ArsTechnica y obtendremos el título del artículo, la URL de la imagen de portada y el primer párrafo del cuerpo del artículo.

Curso intensivo básico sobre extracción de datos

Para empezar, ve al sitio web de destino y abre un artículo. Haz clic con el botón derecho del ratón en el título del artículo y selecciona «Inspeccionar». Esto abrirá las Herramientas de desarrollador y resaltará el elemento HTML de la etiqueta de encabezado.

Para seguir buenas prácticas de SEO, una página solo debe tener un elemento H1. Por lo tanto, h1 se puede utilizar como un selector fiable para el título.

Para elegir el selector de la imagen de portada, utiliza la herramienta Inspeccionar. La imagen está envuelta en una etiqueta `figure`, por lo que es buena idea incluir el elemento padre en el selector. El selector final es `figure img`.

Por último, pero no menos importante, necesitamos encontrar el selector para el primer párrafo.

Dado que el primer párrafo no es el primer elemento hijo del padre, se necesita un selector CSS adicional. El elemento padre tiene una clase llamada `article-content`. Podemos usar esta clase junto con el selector `:first-of-type` para crear nuestro selector final: `.article-content p:first-of-type`.

Aquí está la lista final con los selectores:

  • Título: `h1`
  • Imagen de portada: `figure img`
  • Primer párrafo: `.article-content p:first-of-type`

Creación del rastreador

Ahora que ya tenemos las dependencias en el proyecto, veremos cómo usar Cheerio y Puppeteer juntos para crear un scraper web. Al combinar estas dos herramientas, puedes crear un scraper que sea rápido y potente, ¡así que empecemos!

Crea un archivo llamado `scrape.js` y pega el siguiente código en él:

const puppeteer = require('puppeteer');

const cheerio = require('cheerio');

async function scrape() {

    // Launch a headless Chrome browser

    const browser = await puppeteer.launch();

    // Create a new page

    const page = await browser.newPage();

    // Navigate to the website you want to scrape

    await page.goto('https://arstechnica.com/tech-policy/2023/01/musk-led-twitter-faces-another-lawsuit-alleging-it-failed-to-pay-bills/');

    // Wait for the page to load

    await page.waitForSelector('h1');

    // Extract the HTML of the page

    const html = await page.evaluate(() => document.body.innerHTML);

    // Use Cheerio to parse the HTML

    const $ = cheerio.load(html);

    // Extract the title, cover image, and paragraph using Cheerio's syntax

    const title = $('h1').text();

    const paragraph = $('.article-content p:first-of-type').text()

    const coverImage = $('figure img').attr('src');

    // Display the data we scraped

    console.log({

        title,

        paragraph,

        coverImage

    });

    // Close the browser

    await browser.close();

}

scrape();

Puedes ejecutar el código utilizando el comando node scrape.js. El resultado debería mostrar el título del artículo y la URL de la imagen de portada, y debería tener este aspecto:

{

  title: 'Lawsuit: Twitter failed to pay $136,000 in rent at San Francisco office tower',

  paragraph: 'The Elon Musk-owned Twitter is facing another lawsuit alleging that it failed to pay its bills.',

  coverImage: 'https://cdn.arstechnica.net/wp-content/uploads/2023/01/getty-musk-twitter-800x533.jpg'

}

Pasando al siguiente nivel

Ahora que has aprendido a extraer datos básicos de una sola página web utilizando Puppeteer y Cheerio, es hora de llevar tus habilidades de scraping web al siguiente nivel. Esto es lo que puedes hacer para convertir este scraper básico en uno de última generación:

  • Extraer una categoría completa: Modificando la URL y los selectores de tu código, puedes extraer los artículos de una categoría. Esto resulta útil para extraer grandes cantidades de datos o para realizar un seguimiento de las actualizaciones de una categoría específica de contenido.
  • Usar un agente de usuario diferente con cada solicitud: al cambiar el agente de usuario de tu scraper, puedes eludir restricciones e imitar mejor el comportamiento humano. Esto puede ser útil para extraer datos de sitios web que bloquean o limitan las solicitudes en función del agente de usuario.
  • Integrar una red de proxies: una red de proxies puede ayudarte a rotar direcciones IP y evitar la detección. Esto resulta especialmente útil para extraer datos de sitios web que bloquean direcciones IP o limitan la frecuencia de las solicitudes.
  • Resolver captchas: Algunos sitios web utilizan captchas para evitar el scraping automatizado. Hay varias formas de eludir los captchas, como utilizar un servicio de resolución de captchas o implementar un modelo de aprendizaje automático para reconocer y resolverlos.

Conclusión

A estas alturas, ya deberías tener una buena comprensión de las ventajas y limitaciones de Cheerio y Puppeteer, y deberías ser capaz de tomar una decisión informada sobre cuál se adapta mejor a tus necesidades. Hay una herramienta de web scraping para ti, tanto si eres principiante como desarrollador experimentado.

Si quieres profundizar en Cheerio, echa un vistazo a este artículo escrito por uno de mis compañeros. Trata temas como la identificación de nodos mediante la opción «Inspeccionar elemento», el guardado de los resultados en el disco y el scraping de un sitio web grande como Reddit con más detalle.

Solo hemos abordado superficialmente las capacidades de Puppeteer. Si quieres saber más, este artículo profundiza en el tema y trata aspectos como hacer capturas de pantalla, enviar formularios y extraer datos de varias páginas.

Esperamos que este artículo te haya ayudado a comprender las opciones disponibles y a tomar la mejor decisión para tus necesidades de web scraping.

Una alternativa aún más sencilla

Aunque hemos hablado de las ventajas y limitaciones de Cheerio y Puppeteer, hay otra opción que podrías considerar: utilizar un rastreador como servicio, como WebScrapingAPI.

El uso de un servicio como este conlleva varias ventajas:

  • Puedes confiar en que el scraper es fiable y está bien mantenido: cuenta con recursos dedicados para garantizar que esté actualizado y funcione correctamente. Esto puede ahorrarte mucho tiempo y esfuerzo en comparación con crear y mantener tu propio scraper.
  • Un servicio de scraper web suele ser más rentable que crear uno propio: no tendrás que invertir en el desarrollo y mantenimiento del scraper, y podrás aprovechar cualquier característica especial o asistencia que ofrezca la empresa.
  • Que te detecten ya no será un problema: un scraper web premium evita la detección y, a menudo, puede extraer datos de sitios web de forma más eficaz y eficiente que un scraper creado por ti mismo. Esto te ahorra tiempo y te permite centrarte en analizar y utilizar los datos extraídos.

Te animamos a que pruebes nuestro scraper web y compruebes por ti mismo las ventajas de utilizar una herramienta fiable y de confianza. Crea una cuenta gratuita ahora.

Acerca del autor
Sergiu Inizian, Redactor de contenidos técnicos @ WebScrapingAPI
Sergiu InizianRedactor de contenidos técnicos

Sergiu Inizian es redactor de contenidos técnicos en WebScrapingAPI, donde elabora contenidos claros y prácticos que ayudan a los desarrolladores a comprender el producto y a utilizarlo de forma eficaz.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.