Ejemplo de Web Crawler usando DSS (Decentralized Software Services)

Hace unas semanas, escribí una aplicación tipo Scribble distribuido usando DSS. A fin de la semana pasada, escribí otra aplicación, para aprender conceptos de DSS: una aplicación que visita y baja páginas web de un sitio, con servicios DSS coordinados desde Visual Programming Language (VPL). Hay un programa VPL adicional que lee una página web, usando un control Texto to Speech. Pueden bajarse el ejemplo desde mis carpetas en Skydrive:

DssWebCrawler2008May.zip

La solución

 Está compuesta de tres proyectos: un assembly DSS, uno de librería de clases con algunos utilitarios para analizar contenido HTML, y una librería de clases para hacer testint del parser HTML. La librería de test usa NUnint: pueden removerla de la solución, si quieren, porque sólo es usada para testing, no para la solución final.

El assembly que usa DSS assembly se llama DssWebCrawler. Definí ahí 5 servicios DSS:

Dispatcher: Recibe una URL inicial para bajar, y la envía al Resolver.

Resolver: Este servicio mantiene una lista de URLs visitadas, y controla si las nuevas URLs a bajar son válidas, que pertenezcan al mismo dominio, y que no hayan sido ya procesadas. Está limitado por código a explorar hasta 3 niveles de enlaces.

Downloader: Este servicio lee el contenido de una URL. El contenido obtenido es parte del mensaje de respuesta.

Harvester: Examina el contenido recibido y recolecta nuevas URLs de los enlaces que encuentra dentro. Para cada uno de esos enlaces, envía una notificación a cualquier servicio interesado en esa información.

Reader: Usa el simple parser HTML que escribí para el proyecto. Puede obtener el título de una página, o el contenido, descartando tags de HTML y scripts.

The VPL Program

Hay un program VPL (Visual Programming Language), llamado VPLWebCrawler. Consiste en tres diagramas. El primero define el envío de la primer URL a bajar:

 

El segundo define el proceso de notificación de nuevas URLs encontradas por el componente Harvester:

El tercer diagrama es un “plus”: procesa las notificaciones del Downloader, informando nuevo contenido, lo examina, y envía el título de la página bajada a un componente Text to Speech:

 

Para lanzar la aplicación, ir al menú Run -> Start . Aparece una ventana, pidiendo de ingresar la URL de la página para comenzar a “crawlear”:

Comienza el proceso de “crawling”:

Despues de algunos segundos, los títulos de las páginas bajadas son enviados al servicio Texto to Speech: escucharemos el proceso de cada página.

Leyendo páginas

En otro programa VPL, el VPLWebReader, podemos leer “en voz alta” el contenido de una página web, usando el componente Text to Speech:

Es interesante ver que estamos usando los mismos componentes que en el anterior ejemplo. Pero usando composición VPL, podemos usarlos para otros programas.

Pueden usarlo para leer mis experimentos en “Anglish” (Angel’s English) apuntando a http://ajlopezen.zoomblog.com.

Conclusiones

Los componentes fueron escritos para ser usados desde orquestración de VPL. No tienen “partners”, ni conexiones directas entre ellos. Esta es ua nueva manera de programar: definimos nuestros mensajes de entrada y de respuesta, y luego los usamos desde VPL. La posibilidad de usar notificaciones es algo interesante: se puede usar para usar la misma salida en diferentes componentes destinos.

Podemos jugar un poco más: pruebe de colocar algunos de estos componentes en otro nodo/máquina, usando las nuevas capacidades de “deployer” automático desde VPL.

Espero que encuentren este ejemplo útil: me divertí escribiéndolo, hay más aplicaciones que quisiera pasar a código usando estas tecnologías.

Gracias a Fernando Tubio, por sus ideas iniciales para implementar un web crawler.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com

This entry was posted in 1389, 7337, 7747. Bookmark the permalink.

One Response to Ejemplo de Web Crawler usando DSS (Decentralized Software Services)

  1. Jersson says:

    Muy buen articulo.
    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>