Web scrapping con NodeJS

Estaba dando un paseo por thepiratebay para buscar mi dosis de cultura y se me ocurrió que podía hacer la tarea más fácil usando web scrapping. Web scrapping es una técnica que permite extraer información de páginas web. El programa hace una petición a la web en cuestión y analiza la respuesta del servidor para extraer la información.

El código utiliza principalmente dos librerías:

Aquí está el código completo

var _ = require("underscore");
var request = require("request");
var cheerio = require("cheerio");
var prompt = require("prompt");
var exec = require('child_process').exec;

prompt.start();
prompt.get(["query"], function (err, result) {
    if(!err) {
        var encodeQuery = encodeURIComponent(result.query + " 720p");
        var url = 'http://thepiratebay.sx/search/' + encodeQuery + '/0/7/0';
        var options = {
            url : url,
            headers : {
                'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'
            }
        };

        request(options, function (error, response, body) {
            $ = cheerio.load(body);

            var titles = $('.detName a').map(function (i, a) {
                return a.attribs.title;
            });

            var links = $('#searchResult a[title="Download this torrent using magnet"]').map(function (i, magnet) {
                return magnet.attribs.href;
            });

            _.each(titles, function (title, i) {
                console.log(i + ") " + title);
            });

            prompt.get(['index'], function (err, result) {
                if(!err) {
                    _.each(result.index.split(" "), function (index) {
                        var cmd = 'ssh imac "open /Applications/uTorrent.app ' + links[index] + '"';
                        console.log(cmd);
                        exec(cmd);
                    });
                }
            });

        });
    }
});

La ventaja de utilizar una librería como cheerio es que puedes probar los selectores en el navegador. Cuando tengas el selector adecuado para extraer la información que necesitas es cuando lo añades al programa.

El programa pide una búsqueda y devuelve los resultados de esa búsqueda en thepiratebay, ordenados por el número de seeds. Después pregunta qué enlaces quieres descargar.

El comando que termina de hacer la magia es este

ssh imac "open /Applications/uTorrent.app magnet:…"

Se conecta por ssh a la máquina donde tengo el uTorrent para añadirlo a la lista de descargas.

Un ejemplo de uso

$ node piratescrapper.js 
prompt: query:  the office s09e21
0) Details for The.Office.US.S09E21.720p.HDTV.X264-DIMENSION [PublicHD]
1) Details for The.Office.US.S09E21.720p.HDTV.X264-DIMENSION
2) Details for The.Office.US.S09E21.720p.HDTV.X264-DIMENSION[rartv]
3) Details for The.Office.S09E21.720p.PROPER.WEB-DL.DD5.1.H.264-BS [PublicHD]
prompt: index:  0
ssh imac "open /Applications/uTorrent.app magnet:?xt=..."

Comments