Web Scraping con Node.js

PorErik Guerrero V.

Web Scraping con Node.js

Análisis de contenido de un web site, donde podremos editar, guardar partes del sitio etc. Para ello vamos a usar Web Scraping con nodejs.(sĺo para fines educativos cualquier uso indebido es netamente de su responsabilidad).

Lo necesario:

  1. nodejs v10+
  2. npm v6+
  3. Editor: Visual Studio Code

Pasos:

  1. Inicializamos proyecto de nodejs
$ npm init --yes
  1. Agregamos los siguientes paquetes:
$ npm i cheerio --save
$ npm i request --save
Nota:
Cheerio analiza el marcado y proporciona una API para atravesar / manipular la estructura de datos resultante. No interpreta el resultado como lo hace un navegador web. Específicamente, no produce una representación visual, aplica CSS, carga recursos externos o ejecuta JavaScript. Si su caso de uso requiere alguna de esta funcionalidad, debe considerar proyectos como PhantomJS o JSDom.
request: La solicitud está diseñada para ser la forma más sencilla posible de realizar llamadas http. Es compatible con HTTPS.
  1. Creamos el archivo index.js y  agregamos el siguiente código:
    const cheerio = require("cheerio")
    const fs      = require("fs")
    const request = require("request")
    
    request("https://perudev.pe/category/blog/", (err, res, body)=>{
        //Obtenemos el callback
        if(!err && res.statusCode == 200){
            // Arreglo de rutas de imagenes
            let AurlImagenes = [];
    
            // Obtenemos el body
            let $ = cheerio.load(body);
    
            // Syntax: Subcontenedor, Contenedor
            $('a.img-responsive', '.container').each(function(){
                // Todas las url
                var url       = $(this).attr("href");
                // Todas las rutas de las imagenes
                var urlImagen = $(this).find("img").attr("src");
                // Almacenamos todas las imagenes que pertenezcan al dominio raiz("perudev.pe")
                if(urlImagen && urlImagen.indexOf("perudev.pe")!=-1){
                    console.log(urlImagen);
                    AurlImagenes.push(urlImagen);
                }     
            })
    
            // Almacenamos las imagenes en nuestro disco local, para ello usamos el paquete fs
            for(var i=0; i<AurlImagenes.length; i++){
                request(AurlImagenes[i]).pipe(fs.createWriteStream(`images/img${i+1}.jpg`));
            }
    
            console.log("Se guardó las imágenes: ", AurlImagenes);
        }
    });

     

  1. Ejecutamos
$ node index.js
Facebook Comments

About the author

Erik Guerrero V. administrator

Mas de 10 años de experiencia como analista programador, tanto backend como frontend, muchos proyectos tanto intranet, extranets, redes sociales, publicitarios, comercio electrónicos, ERP, CRM, BI, SIst. de Gestion, Email Marketing, Sist. Financieros, Contables, también me desempeño como freelance en mis tiempos libres, como también me dedico a la investigación en cuanto a nuevas tecnologías.