Code Kata: Capturando páginas web

Para practicar, como Code Kata (y también, como prueba de concepto para un proyecto relacionado con Hacia una Historia Clínica Digital de Código Abierto), estuve codificando un programa de Web Scraping. Pueden bajarse el código completo desde: Web Scrapping Example (pensé que en inglés era “scrapping” con doble p, así que quedó por ahora con ese nombre :-)

La solución, escrita en C#, contiene un proyecto de librería de clases, uno de tests de Visual Studio, y un programa de demostración, del tipo consola. Fue interesante codificar un mini HTML parser (simple, que no contempla todos los casos, sólo los necesarios para el trabajo), que soporta el análisis de páginas mal formadas. El usar TDD (Test-Driven Development) me permitió ir codificándolo de forma de estar seguro de lo que necesitaba como resultado, y además, que ese resultado fuera el correcto. Ejemplo de test simple:

[TestMethod]


public void ParseSimpleTag()


{


    HtmlParser parser = new HtmlParser("<html>");


    HtmlToken token = parser.NextToken();


 


    Assert.IsNotNull(token);


    Assert.AreEqual(HtmlTokenType.Tag, token.TokenType);


    Assert.AreEqual("html", token.Name);


 


    Assert.IsNull(parser.NextToken());


}

Para capturar las páginas, usé System.Net.WebClient, con código tan simple como:

private string GetContent()


{


    WebClient webclient = new WebClient();


    return webclient.DownloadString(this.address);


}





Como demostración, en el programa de consola, parto de explorar la página:



Medline Plus Drugs



Lanzando el programa de consola, aparece la salida, capturando algunos cientos de páginas, sobre información de drogas medicinales (efectos, posología, contraindicaciones, etc):





Exploro las páginas que apuntan a la información de drogas por letra, obtengo los enlaces a cada droga, traigo el contenido de la página, extraigo la información que me interesa (descartando el principio y el fin de la página) por cada droga. Un ejemplo de página:





Al final, genero una página de índice:





Podría implementar un mejor parser de HTML, y algunas operaciones más de extracción de datos. Pero para lo que quería obtener, me bastó. Y fue una buena experiencia de TDD.



Si usan la información generada, recuerden de leer los términos del sitio original (entiendo que necesitan una autorización para usarlo de forma comercial, no parece que haya problema en capturar los datos en un utilitario no comercial).



¿Por qué no explorar directamente la web para obtener estos datos? Porque el contexto de la prueba de concepto que me impuse, es que los médicos y enfermeros no tienen acceso a Internet desde todas las máquinas donde van a estar trabajando.



Nos leemos!



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

This entry was posted in 12081, 12082, 1389, 5374. Bookmark the permalink.

2 Responses to Code Kata: Capturando páginas web

  1. Fabio Maulo says:

    Y mirá vos que interesante que es esta historia… siempre no quejamos que los OSS tienen poca documentación aunque, al final, cada uno tiene cientos si no miles de posts. No?

  2. Federico says:

    Aca tenes archivos .csv con la lista de todas las drogas aprovadas por la fda.

    http://www.fda.gov/Drugs/DevelopmentApprovalProcess/UCM070829

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>