Web Scraping con NodeJS y Osmosis

Qué es el Web Scraping

El “Web Scraping” es una técnica para extraer información de una página web. Su uso permite obtener cantidades ingentes de información, lo que se denomina “Big Data”.

Para usarlo es necesario tener nociones básicas-medias de HTML y de las etiquetas más usuales, así como de JS y CSS, en general de tecnologías web de parte del cliente.

Para obtener datos de una web es necesario saber además tecnologías web del parte del servidor, como PHP o NodeJS, por ejemplo. El “Web Scraping” se tiene que hacer de parte del servidor, que es el que realizará peticiones a las webs y procesará los datos. En esta guía se usarán comandos básicos de NodeJS.

Antes de comenzar, es necesario saber que no todo el “Web Scraping” es legal, al menos en España. Según la justicia española, estos son los casos en los cuales esta técnica es ilegal:

  1. Cuando vulnera los derechos intelectuales del autor de la página web a extraer.
  2. Cuando existe competencia desleal.
  3. Cuando viola los términos legales y condiciones de uso de la web.
  4. Si incumple la normativa de protección de datos personales, más concretamente la Ley Orgánica 15/1999, de 13 de diciembre de Protección de Datos de Carácter Personal.

Este post tiene un fin informativo, por lo que el uso que el lector haga de estas tecnologías es su responsabilidad.

Instalación de NodeJS y Osmosis

Si tienes Linux

1. Instalamos los paquetes nodejs y npm del gestor de paquetes que tenga instalado en su equipo, en el caso de Debian y derivados: `

# apt install nodejs npm

2. Ya instalado NodeJS, ejecutar:

# npm install http osmosis

Si tienes Windows y MacOS

Descargar y ejecutar los instaladores de la página de NodeJS: https://nodejs.org/es/download/

Creación del Servidor

  1. Creamos un nuevo archivo llamado index.js
  2. Añadimos el código base para el servidor:
    var http = require('http');
    const osmosis = require('osmosis');

    lvar server = http.createServer(function(request, response) {

    response.writeHead(200, {"Content-Type": "text/plain"});

    });

    var port = process.env.PORT || 1337;
    server.listen(port);

    console.log("Server running at http://localhost:%d", port)

  3. Creamos un nuevo archivo (en la misma carpeta que el anterior) llamado package.json y añadimos el siguiente código:

    {
    "name": "Hola Mundo",
    "description": "holamundo",
    "version": "0.0.1",
    "private": true,
    "license": "MIT",
    "author": "My name",
    "scripts": {
    "start": "node index.js"
    },
    "dependencies": {
    "osmosis": "^1.1.4"
    }
    }

    donde los campos se pueden editar al gusto excepto la parte de scripts y dependencias.

    Uso básico de Osmosis

    Después de la línea response.writeHead(200, {“Content-Type”: “text/plain”}); escribimos el siguiente código:
    osmosis
    .get('http://www.ejemplo.es') // Especificamos la URL a obtener datos
    .find('#ctPMain') // Escogemos el elemento del que queremos extraer la información, se escribe en formato JQuery, # significa que buscamos un id llamado "ctPMain"
    .set({'elements': ['td']}) // Creamos un array JSON con los elementos "td" extraídos de la anterior etiqueta (también en formato JQuery)
    .log(console.log)
    .data(function(data){
    datos = JSON.stringify(data); // Acciones
    })
    .error(console.log);
    response.end(datos); // Muestra en pantalla el JSON creado

    Para ejecutarlo en la máquina se puede escribir en un terminal: node index.js.

    Documentación

    Esta aplicación cuenta con una extensa documentación que puede ser consultada en github y de la que se pueden extraer gran cantidad de datos anidando las opciones correctamente.

    Este post ha sido redactado por David Población Criado, estudiante de Ingeniería Informática y Estadística en la Universidad de Valladolid.

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.