web.py + gmap + scrapers = mashup

written by juan on June 9th, 2007 @ 07:36 PM

Es increible lo incomodas y poco ricas que son las interfaces de los sitios para buscar inmuebles en Argentina.

Los sitios online repiten el mismo pecado que los clasificados de papel: arman listados interminables de propiedades, que son difíciles de comparar entre sí y de ubicar en un mapa, y de colaborar con otras personas.

Si son varias personas las que participan de la decisión de alquilar un lugar la cosa es aún más complicada. Uno debe armar una forma de trabajo ordenada (sobre una wiki?) donde se pueda hacer comentarios y donde se mantenga un estado/workflow (por ejemplo, para marcar si la propiedad ya no está disponible).

Estas semanas estamos buscando un lugar para alquilar; y decidí encarar uno por uno los problemas para mejorar la calidad de esta tarea.

¿El resultado? Una fría tarde de sábado dio como resultado una aplicación muy útil para la tarea a resolver (buscar lugares); que agregó mucho valor a la resolución de la tarea y algunas cosas para pensar.

Lo primero que me recordó son las conocidas frases:

  • no hay una herramienta que solucione todos los problemas
  • cada problema tiene un conjunto de herramientas que resuelven el problema de forma óptima

screenshot

En este caso elegí python para encarar los problemas. Todo el código relacionado a este post, se encuentra en https://svn.leak.com.ar/inmuebles/, bajo la licencia GPL.

Scrapers

El primer problema que me encontré fue conseguir los datos de los inmuebles. Se le suele llamar scraper a las herramientas que convierten contenido orientados a humanos (como páginas web) en contenidos orientados a computadoras (que ellas pueden procesar).

En el pasado escribí varios scrapers en varios lenguajes (bash, c, java) pero esta fue la primera vez que lo hacía con python. Para eso elegí BeautifulSoup con excelentes resultados.

Todas la páginas de inmuebles tienen tablas...sólo hay que encontrar la tabla que tiene los datos y recorrerlas. Por ejemplo: Para el caso de clarin es posible obtener los datos de la propiedad de la siguiente forma:
        soup = BeautifulSoup(self.pageContentProvider.retriveMain(id),
                             convertEntities="html", smartQuotesTo="html")
        # buscar tabla
        l = soup.findAll('table', width="261")
        if len(l) == 1:
            ret = {}
            for i in table.findAll('tr'):
                row = []
                for j in i.findAll('td'):
                    text = ''.join([e for e in j.recursiveChildGenerator()
                        if isinstance(e, unicode)]).strip()
                    row.append(textCleanerStrategy.clean(text))
                if len(row[0]) != 0:
                    ret[row[0]] = row[1]
            return ret
        .....

¡Nada mas! Se tarda 10 minutos en armar un nuevo scraper!

Los scrappers quedaron implementados en https://svn.leak.com.ar/inmuebles/scrapper.py y se puede usar desde la linea de comandos:
juan@dinah  $ ./scrapper.py
Usage: ./scrapper.py proveedor id_de_la_propiedad

Example:  ./scrapper.py clarin 1325956
Example:  ./scrapper.py todopropiedades  135-15082
Example:  ./scrapper.py argenprop BW38037
Example:  ./scrapper.py flof 6479

juan@dinah  $ ./scrapper.py clarin 1440588
                      the_geom: -58.37799 -34.604725
              Superficie total: 120 m2
                     Categoría: Oficina
                        Precio: $ 2000
             Tipo de propiedad: Locales Comerciales, Oficinas y Consultorios
                    Antigüedad: 45 años
                     Operación: Alquiler ofrecido
        Condición del inmueble: Excelente
                       Visitas: 79
          Fecha de publicación: 31/05/2007
                     Ubicación: Bs. As. Capital Federal Capital Federal Centro ESMERALDA 300
             Superficie propia: 80 m2

Los scrappers sólo obtienen información y desconocen de la semántica de cada proveedor de datos. Otra herramienta podría encargarse del vocabulario homegenizar la información

Aplicación Web

Ya con la disponibilidad de datos armé una pequeña aplicacion web, usando el excelente web.py y google maps. El api de google map ya la conocía (flof.com.ar) y web.py también, pero no dejo de sorprenderme de lo fácil que es hacer una aplicación.

Recomiendo que prueben web.py! ¿Mi conclusión? No hay que tener miedo de desarrollar

Comments

  • Claudio on 11 Jun 01:29

    La verdad, muy groso parece! Una consulta, estaba recorriendo el svn, y me encontré con esto: https://svn.leak.com.ar/smalltalkdoc/trunk/smalltalkdoc/, qué es? la verdad no me dio para bajarmelo y verlo, pero es un "documentador" de clases Smalltalk? Saludos

Comments are closed

Options:

Size

Colors