Web Scraping con Javascript

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).

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.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.