Python

En el mundo de Data Science no siempre tenemos la data que necesitamos para realizar nuestros proyectos o los de nuestros clientes. Por esto se hace necesario aprender a obtener la data de diferentes fuentes. A veces ya encontramos los datasets completos y a veces tenemos que poner un poco mas de trabajo para obtenerla.

Tu creatividad es el recurso fundamental para esta laboral y existen diferente tecnicas para realizar este famoso web scrapping. Hoy vamos a ver una que es identificar el API que esta brindando la data a una pagina web y luego pegarle al API para obtener la data que necesitamos.

Para esto necesitamos seleccionar una victima, en este caso sera el portal inmobiliario colombiano más importante: Finca Raiz. Esto porque tiene gran cantidad de data util y con aplicaciones directas tanto para personas que deseen invertir en el sector inmobiliario como para empresas que se dediquen a este rubro.

    ¨Primero vamos a seleccionar un caso de uso. Tomaremos los apartamentos en venta en la ciudad de Bogotá.

      Primero abrimos las herramientas de desarrollo del navegador, luego ponemos el filtro y finalmente le damos click en “buscar”. Allí vamos a ver la lista de llamador que realiza el navegador al back de la pagina, nuestra tarea es identificar cual de ellos trae la data que necesitamos para poder homologar el llamado desde un script. 

        Para este ejemplo vemos como la data es entregada por el primer llamado cuyo nombre es “search”. Asi que vamos a dar click en este llamado y obtendemos la informacion mas relavente en la pestaña “Headers”. Vemos que esta la URL que se consume y el tipo de metodo implementado. 

        Dado que el metodo implementado es un POST, necesitamos el body que estan usando donde se encuentra le informacion que pusimos en el filtro de busqueda. Para esto vamos a la pestaña “Payload”. Luego damos click en “view source”, allí tenemos el json que esta siendo utilizado como body del POST.

        Dado que el metodo implementado es un POST, necesitamos el body que estan usando donde se encuentra le informacion que pusimos en el filtro de busqueda. Para esto vamos a la pestaña “Payload”. Luego damos click en “view source”, allí tenemos el json que esta siendo utilizado como body del POST.

        En este momento vemos que la data que obtuvimos esta vacia, aun cuando la respuesta del API fue exitosa. Esto es una buena noticia ya que vemos podemos consumir el API directamente desde nuestro script lo que facilita mucho el trabajo, la mala noticia es que la respuesta viene vacia. Usualmente la experiencia y cratividad te guiara para solucoinar estos inconvenientes, ya que cada caso es distinto y siempre hay muchas posibilidades. En nuestro ejemplo para solucionarlo lo que haremos es recargar la pagina y volver a tomar el body del request “search”. Vemos que ahora es muy diferente. Lo cambiamos en nuestro codigo y listo.

        Ya tenemos la data, ahora solo necesitamos limpiarla un poco.

        Aqui vemos un detalle importante y es la cantidad de resultados que obtuvimos. Es muy comun en los APIs que la cantidad de resultados se encuentren limitados por cada llamado. En estos casos se usa una variable llamada “offset” que nos indica el punto de inicio para la ventana de resultados que obtendremos.

        Si queremos obtener 100 resultados y dejemos el offset en 0, vamos a obtener 100 resultados partiendo del inicio. Ahora si queremos los siguientes 100 resulados debemos poner el offset en 100 para obtener el siguiente bloque.

        Con esto en mente y para cerrar, vamos a hacer una funcion un poco mas sofisticada para obtener casi toda la data de los apartamente en venta en la ciudad en bogota del portal.

        En nuestra funcion final hemos aplicado un par de cosas interesantes. La primera es el offset que ya lo explicamos, la segunda es un ordenamiento por estratos. Este ordenamiento es aplicado en caso de que la data supere los 10000 inmuebles, ya que es el limite del API. Al ordendar por estrato nos permite que esa cantidad disminuya para cada llamado y asi lograr obtener la data completa.

        Esta es una forma de obtener la data y se puede optimizar, simplemente nos funciona como ejemplo de como podemos facilmente hacer data scrapping directo del API.

        El notebook completo se encuentra aqui.

        Cualquier duda que tengan o feeddback sera bien recibido en los comentarios,

        Att. Squaid