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:
- Cuando vulnera los derechos intelectuales del autor de la página web a extraer.
- Cuando existe competencia desleal.
- Cuando viola los términos legales y condiciones de uso de la web.
- 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
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
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
Creamos un nuevo archivo llamado index.js y 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)
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.