Volver al blog
La ciencia del web scraping
Robert SfichiLast updated on Mar 31, 20267 min read

Las 5 mejores bibliotecas JavaScript para Web Scraping

Las 5 mejores bibliotecas JavaScript para Web Scraping

A medida que ha ido evolucionando la era informática, se han desarrollado numerosas técnicas útiles que permiten crear conjuntos de datos gigantescos. Una de estas técnicas se denomina «web scraping» y es la más utilizada por científicos de datos, estadísticos, informáticos y desarrolladores de software para recabar información valiosa sobre un tema concreto.

La técnica de web scraping se puede llevar a cabo de muchas maneras utilizando diversas herramientas, como API, extensiones de navegador, marcos de trabajo, etc. Pero el tema central de este artículo es la última categoría de herramientas mencionada.

Al ser uno de los lenguajes de programación más utilizados para desarrollar software, JavaScript cuenta con numerosas bibliotecas que pueden ayudarte en el proceso de recopilación de los datos que necesitas.

En este sentido, nos gustaría ofrecerte nuestras recomendaciones sobre las 5 bibliotecas de JavaScript más útiles en lo que respecta al web scraping.

Una breve introducción al web scraping

Como su nombre indica, un web scraper es un software que rastrea diferentes páginas web para extraer datos, como cadenas de texto específicas, números o archivos adjuntos.

Puedes verlo como una alternativa mejor que copiar y pegar información de una página web en una hoja de cálculo. En lugar de hacerlo tú, un programa informático puede hacerlo por ti. Es mucho más rápido y probablemente más preciso. Está bastante claro que, sin él, tendríamos que trabajar mucho más para obtener los mismos resultados.

Casos de uso del web scraping

La gente utiliza los web scrapers por todo tipo de razones. Los casos de uso más populares son:

  • Generación de clientes potenciales
  • Comparación de precios
  • Análisis de mercado
  • Investigación académica
  • Auditoría SEO y búsqueda de palabras clave
  • Creación de conjuntos de datos de entrenamiento y prueba para procesos de aprendizaje automático

Una empresa de comercio electrónico podría utilizar un rastreador web para recopilar información sobre las fotos, las características o la descripción de un producto que hayan publicado sus competidores, con el fin de obtener una mejor visión general del mercado.

GPT-3 está considerado como una de las herramientas de software más potentes del mercado en la actualidad. Los scripts de aprendizaje automático funcionan mejor cuando se alimentan con una gran cantidad de datos. Sin embargo, esto puede llevar horas, incluso días. Los científicos de datos pueden recurrir a la ayuda de los rastreadores web para recopilar todos los conjuntos de datos que necesitan con el fin de entrenar los modelos de aprendizaje automático.

Prepara tu espacio de trabajo

Para poder utilizar las siguientes bibliotecas, debes asegurarte de que tienes Node.js instalado en tu equipo. Compruébalo ejecutando el siguiente comando en una nueva ventana de terminal:

node -v

Si tienes Node.js instalado, deberías ver la versión en la siguiente línea. Tendrá un aspecto similar a este:

v14.15.0

Si has recibido la confirmación de que Node.js está instalado, pasa a la siguiente sección. Para aquellos que no hayan instalado Node.js antes, vamos a ver el proceso para hacerlo ahora mismo.

En primer lugar, ve al sitio web de Node.js y descarga la última versión (14.16.0 en el momento de escribir este artículo). Haz clic en el botón que dice «Recomendado para la mayoría de los usuarios» y espera a que se complete la descarga. Ejecuta el instalador una vez finalizada la descarga.

Una vez completada la instalación, puedes comprobar la versión de Node.js ejecutando el siguiente comando en una nueva ventana de terminal:

node -v

Al cabo de unos segundos, deberías ver la versión de Node.js que tienes instalada.

Las 5 principales herramientas de JavaScript utilizadas para el web scraping

Axios

Axios es una de las bibliotecas de JavaScript más populares, utilizada para realizar solicitudes HTTP directamente desde un entorno Node.js. Con Axios también podemos descargar datos con facilidad, al tiempo que eliminamos la necesidad de pasar los resultados de la solicitud HTTP al método .json(). Huelga decir que Axios es una herramienta muy potente en lo que respecta al web scraping.

Para instalar Axios, ejecuta el siguiente comando en la carpeta del proyecto:

npm i axios

Mediante el uso de las siguientes bibliotecas, demostraremos el potencial de Axios con mayor claridad.

Nightmare

Nightmare se creó con la intención de ayudar a sus usuarios a automatizar diferentes tareas en sitios web que no disponen de una API.

En la actualidad, la mayoría de la gente lo utiliza para crear una solicitud más realista al intentar extraer datos de una página web. Al utilizar sus funciones principales, podemos imitar la acción de un usuario con una API que parece sincrónica para cada bloque de script.

Echemos un vistazo a un ejemplo real de cómo se podría utilizar Nightmare para extraer datos de la web.

Como utiliza Electron en lugar de Chromium, el tamaño del paquete es un poco menor. Nightmare se puede instalar ejecutando el siguiente comando.

npm i nightmare

Intentaremos hacer una captura de pantalla de una página web aleatoria. Creemos un nuevo archivo index.js y escribamos o copiemos el siguiente código:

const Nightmare = require('nightmare')

const nightmare = new Nightmare()
return nightmare.goto('https://www.old.reddit.com/r/learnprogramming')
	.screenshot('./screenshot.png') 
	.end()
	.then(() => {
		console.log('Done!')
	})
	.catch((err) => {
		console.error(err)
	})

Como puedes ver en la línea 2, creamos una nueva instancia de Nightmare, dirigimos el navegador a la página web de la que queremos hacer una captura de pantalla, tomamos y guardamos la captura en la línea 5 y finalizamos la sesión de Nightmare en la línea 6.

Para ejecutarlo, escribe el siguiente comando en la terminal y pulsa Intro.

node index.js

Deberías ver dos archivos nuevos, screenshot.png, en la carpeta de proyectos.

Cheerio

Para probar la funcionalidad de Cheerio, intentemos recopilar todos los títulos de las publicaciones del mismo subreddit: /r/learnprogramming.

Creemos un nuevo archivo llamado index.js y escribamos o simplemente copiemos las siguientes líneas:

const axios = require("axios");
const cheerio = require("cheerio");

const fetchTitles = async () => {
	try {
		const response = await axios.get('https://old.reddit.com/r/learnprogramming/');

        const html = response.data;

		const $ = cheerio.load(html);

		const titles = [];

		$('div > p.title > a').each((_idx, el) => {
			const title = $(el).text()
			titles.push(title)
		});

		return titles;
	} catch (error) {
		throw error;
	}
};

fetchTitles().then((titles) => console.log(titles));

Como podemos ver, Cheerio implementa un subconjunto del núcleo de jQuery. Para asegurarnos completamente de que solo seleccionamos las etiquetas de anclaje que contienen el título de la publicación, también vamos a seleccionar sus elementos padres utilizando el siguiente selector en la línea 15.

Para obtener cada título individualmente, recorreremos cada publicación utilizando la función each(). Por último, al llamar a text() en cada elemento, obtendremos el título de esa publicación específica.

Para ejecutarlo, solo tienes que escribir el siguiente comando en la terminal y pulsar Intro.

node index.js

Deberías ver una matriz que contiene todos los títulos de las entradas.

Puppeteer

Puppeteer nos ayuda a automatizar las tareas más básicas que solemos realizar al usar un navegador web, como rellenar un formulario o hacer capturas de pantalla de páginas específicas.

Intentemos comprender mejor su funcionalidad haciendo una captura de pantalla de la comunidad de Reddit /r/learnprogramming. Ejecuta el siguiente comando en la carpeta de proyectos para instalar la dependencia:

npm i puppeteer 

Ahora, crea un nuevo archivo index.js y escribe o copia el siguiente código:

const puppeteer = require('puppeteer')

async function takeScreenshot() {
	try {
		const URL = 'https://www.old.reddit.com/r/learnprogramming/'
		const browser = await puppeteer.launch()
		const page = await browser.newPage()

		await page.goto(URL)
		await page.pdf({ path: 'page.pdf' })
		await page.screenshot({ path: 'screenshot.png' })

		await browser.close()
	} catch (error) {
		console.error(error)
	}
}

takeScreenshot()

Hemos creado la función asíncrona takeScreenshot().

Como puedes ver, los métodos pdf() y screenshot() nos ayudan a crear un nuevo archivo PDF y una imagen que contiene la página web como componente visual.

Para ejecutarlo, ejecuta node index.js en una nueva ventana de terminal. Deberías ver dos nuevos archivos en la carpeta projects llamados page.pdf y screenshot.png.

Selenium

Selenium es utilizado por muchos especialistas en automatización, científicos de datos, ingenieros de control de calidad y desarrolladores de software por igual. Con solo instalarlo y escribir menos de 10 líneas de código, podemos sentir el poder del web scraping.

Al igual que Nightmare, Selenium crea una solicitud HTTP más realista al realizar acciones como abrir páginas, hacer clic en botones o rellenar formularios.

Podemos instalar Selenium ejecutando el siguiente comando en una nueva ventana de terminal:

npm i selenium-webdriver

Ahora, probémoslo realizando una búsqueda en Google. Primero, crea un nuevo archivo index.js y escribe o copia el siguiente código:

const {Builder, By, Key, until} = require('selenium-webdriver');

(async function example() {
 let driver = await new Builder().forBrowser('firefox').build();
 try {
   await driver.get('http://www.google.com/');
   await driver.findElement(By.name('q'));
   await driver.sendKeys(web scraping, Key.RETURN);
   await driver.wait(until.titleIs('web scraping - Google Search'), 1000);
 } finally {
   await driver.quit();
 }
})();

Consulta la documentación de Selenium para obtener más información.

Conclusión

El web scraping es una técnica muy potente para extraer información de páginas web. Para cualquiera de los casos de uso presentados anteriormente, el web scraping puede ahorrar mucho dinero y tiempo. Si el script está programado adecuadamente, el ordenador puede extraer y organizar mucha más información en comparación con un ser humano. Por eso es importante contar con las bibliotecas adecuadas.

Surgen dificultades al realizar el web scraping. Los problemas son inevitables, pero normalmente se pueden resolver. Al final, todo se reduce a tu experiencia. Si te sientes más cómodo usando Selenium en lugar de Nightmare, adelante. No existe la biblioteca perfecta y lo sabemos. Solo esperamos haber conseguido que tu proceso de decisión sea un poco menos complicado.

Puedes encontrar más información sobre el web scraping leyendo los siguientes artículos:

Acerca del autor
Robert Sfichi, Desarrollador full-stack @ WebScrapingAPI
Robert SfichiDesarrollador full-stack

Robert Sfichi forma parte del equipo de WebScrapingAPI, donde contribuye al desarrollo del producto y ayuda a crear soluciones fiables que dan soporte a la plataforma y a sus usuarios.

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.