Hacer web scraping con Javascript no es algo muy complicado, si es que te lo explican como lo voy a hacer ahora.
Para empezar debes saber que cuando hagas web scraping, en la mayoría casos, te vas a enfrentar a dos tipos de webs:
- Webs que te ofrecen el contenido (html) a la primera petición.
- Webs que con Javascript genera el html (SPA, etc).
A continuación te contaré como puedes hacer web scraping en cada una de ellas.
El único requisito para realizar los ejemplos es tener instalado NodeJS (Descargar).
Tabla de Contenido
Web Scraping a páginas HTML con Javascript
Extraer información de este tipo de páginas es bastante sencillo, los pasos que tienes que seguir son:
- Descargar el contenido (código) de una página web.
- Convertiremos el código descargado en un formato amigable para buscar la información a extraer.
- Guardamos el contenido requerido, lo ubicaremos por medio de reglas que se llaman «selectores«.
Ejemplo de web scraping a páginas HTML
Utilizaremos las librerías cheerio y axios.
Web scraping a Xataca
El siguiente ejemplo consiste en saber cuales son los nuevos artículos de Xataca, con el fin de tener ideas para contenido.
Primero instalaremos las librerías
npm i express axios cheerio
Luego de instalar las librerías, las importamos.
const axios = require("axios");
const cheerio = require("cheerio");
Extraemos el contenido HTML de XATAKA
const html = await axios.get("https://www.xataka.com/");
Cheerio lee el contenido y lo guardamos en una variable llamada «$»
const $ = await cheerio.load(html.data);
Hacemos una iteración por cada noticia del home, extraemos el titular (h2) y la ruta de la imagen (img.src).
Acá esta el código completo:
const axios = require("axios");
const cheerio = require("cheerio");
async function scrapeXataca() {
//extraemos el contenido HTML de XATAKA
const html = await axios.get("https://www.xataka.com/");
//cheerio lee el contenido y lo guarda en una variable llamada "$"
const $ = await cheerio.load(html.data);
//creamos una lista donde se almacenará la data
let data = [];
//hacemos una iteración por cada noticia del home, al inicio utiliza la variable "$"
$("article").each((i, elem) => {
//agregamos los elementos a la lista de data
data.push({
//dentro del elemento "article" buscamos la etiqueta <img> y extraemos el "src"
image: $(elem).find("img").attr("src"),
// dentro del elemento extraeremos el titular, que sería la etiqueta <h2>
title: $(elem).find("h2").text(),
});
});
//imprimimos la data en consola
console.log(data);
}
scrapeXataca();
Web Scraping a páginas que se generan con Javascript
Este tipo de webs son modernas, se generan con Javascript, algunos sistemas para Ecommerce como Vtex lo usan.
Para extraer información de este tipo de páginas web, lo puedes hacer con una librería llamada Puppeteer.
Con el siguiente código puedes sacar los productos:
const puppeteer = require("puppeteer");
const run = async () => {
//inicializamos el navegador
const browser = await puppeteer.launch({
headless: false,
});
//creamos una pestaña en el navegador
var page = await browser.newPage();
//Navegamos a la URL que vamos a extraer información
await page.goto("https://www.youtube.com", {
timeout: 60000,
waitUntil: ["networkidle0", "networkidle2"],
});
//Extraemos los títulos de los vídeos que aparecen en la portada
const titulos = await page.$$eval("yt-formatted-string#video-title", (as) =>
as.map((a) => a.getAttribute("aria-label"))
);
//imprimimos cada titulo en la consola
for (var titulo of titulos) {
console.log("[+] Título encontrado: ", titulo);
}
};
run();
Con estos ejemplos ya puedes darte una idea de como extraer información de páginas web.
Puedes contactarme para ayudarte con mi servicio de web scraping por el formulario de mi web.