Extrayendo resultados de google mobile con CasperJS

Mar 25, 2013 1 Comment by

CasperJS es un framework sobre PhantomJS que nos entrega una herramienta de mas alto nivel (comparado con PhantomJS) para automatizar procesos en un navegador, como completar formularios, extraer datos, secuencia de navegación entre páginas, etc.

Instalación con git

git clone git://github.com/n1k0/casperjs.git
cd casperjs
git checkout tags/1.0.2

Ahora solo nos queda agregar la ruta del “binario” de casperjs a nuestras variables PATH global o crear un enlace en /bin/ … /usr/bin.

El siguiente script (no muy funcional, ya que podemos buscar en google usando sus API), es una modificación al ejemplo googlepagination.js del package de casperjs, modificando el user agent, el sitio a extraer (google mobile), inyectar jquery, extraer datos (titulo, enlace y comentario), etc. Resumiendo, ingresa datos en un formulario y luego comienza a iterar hasta la página 10, extrayendo los resultados a un arreglo global.

/**
 * Capture results multiples pages and links from google mobile
 *
 * Usage: $ casperjs find.js my search terms
 *
 * by deerme.org
 */

var casper = require("casper").create({ clientScripts:['jquery-1.8.1.min.js'] });
var utils = require("utils");
var currentPage = 1;
var results = [];

if (casper.cli.args.length === 0) {
    casper
        .echo("Usage: $ casperjs find.js my search terms")
        .exit(1)
    ;
}

var processPage = function() {

	if ( currentPage == 10 )
	{
		return true;
	}

	res = this.evaluate(function(){
                var res = [];
                $("div.web_result").each(function()
                {
                        res.push({
                                        title: $(this).find("a").text().trim(),
                                        link:"http://www.google.com" + $(this).find("a").attr('href'),
                                        description:$(this).find("span.cite").parent().parent().text().trim()
                        });
                });
                return res;
        });

        for(k in res)
        {
                results.push(res[k]);
        }

        //utils.dump(results);
        this.capture("google-mobile-"+ currentPage +".png");
	this.echo("Retrieve results from page " + currentPage );

	// Next Link
	if (this.exists("#navbar"))
	{
        	currentPage++;
	        this.echo("requesting next page: " + currentPage);
        	url = this.getCurrentUrl();
	        this.thenClick("#navbar a").then(function()
		{
			this.waitFor(function()
			{
				return url !== this.getCurrentUrl();
            		}, processPage);
		});
	}
	else
	{
        	this.echo("EOF");
	}
	return true;
};

// Change User Agent
casper.userAgent(' Opera Mini 5 Beta: Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.15650/756; U; en) Presto/2.2.0');
// Load Page
casper.start("http://google.com/", function() {
    this.fill('form[action="/search"]', {
        q: casper.cli.args.join(" ")
    }, true);
});
// Retrivie multiples pages and links
casper.then( processPage  );
casper.then(function(){
	utils.dump(results);
});
casper.run();

Si ejecutamos el script junto a los arugmentos a buscar

casperjs googlemobile.js python spanish

El script imprimirá los resultados

Javascript, Web Scraping

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.

One Response to “Extrayendo resultados de google mobile con CasperJS”

  1. puertas y ventanas de madera says:

    No definitivamente mucho que conocer tema .
    Me gusta mucho todos los puntos hiciste .

Leave a Reply


* 4 = eight