lunes, 7 de noviembre de 2016

Como hacer web scraping utilizando excel y vba? - Parte 3

Y llegamos a la tercera y última entrega de como hacer web scraping utilizando excel y nuestra poderosa herramienta el vba. Recuerden que para consultar las dos primeras partes de este pequeño tutorial, pueden hacer clic en: Parte 1 y en Parte 2.

El objetivo entonces en este post, es que diseñemos una macro que nos sirva para extraer la información de las páginas web. Lo primero que vamos a hacer es abrir excel y llamar el editor de vba (recuerden utilizar el atajo de teclado: Alt + F11).

Y estando en el editor vamos a dar clic en la opcíon del menú tools (herramientas en español) y seleccionamos la opción: referencias o reference (según el idioma que tengamos en la configuración):



Al hacerlo, se va a desplegar un cuadro de dialogo que contiene las librerías que estan cargadas actualmente y las que están disponibles y que podemos activar haciendo clic en la casilla de selección que esta adelante de cada una.

Para nuestro propósito, necesitamos seleccionar las siguientes (Microsoft HTML Object Library y Microsoft Internet Controls):




Antes de iniciar a escribir nuestro código, vamos a crear en una hoja nueva de excel el siguiente formulario:


Si recuerdan de la Parte 2 de este tutorial, esas son las mismas columnas que tiene la página en la que podemos consultar el estado de los vuelos. Nosotros, vamos a adicionar en la celda B3, la ciudad de origen del vuelo, en B4 la ciudad de destino y en B6 la fecha en la que queremos realizar la consulta. Y el botón consultar lo he puesto para que al hacer clic se active la macro siguiente:

A continuación el código fuente:

La línea 3 del código anterior nos va a servir para crear un objeto explorador y la línea 4 va a hacer que no sea visible a nuestros ojos.

Luego en la línea 6, vamos a hacer que el objeto InternetExplorer que acabamos de crear navegue en la dirección que le estamos pasando entre comillas. Muy importante, en esta línea del programa los valores para las variables: ciudad de origen, destino o fecha están asociadas al texto contenido en las celdas B3, B4 y B6 respectivamente. Esto es muy importante, ya que nos va a permitir que cuando cambiemos la ciudad de origen, destino o fecha de verificación en el formulario de excel y ejecutemos la macro, esta nos genere los resultados correctos.

Las líneas 8 a 10, se encargan de no permitir que la macro continúe hasta tanto la página web no se haya cargado y el servidor web entregue la respuesta a la consulta que estamos haciendo.

En la línea 12 vamos a definir la variable doc como un documento HTML y en la línea 14 la vamos a asociar con el documento cargado en el explorador.

Entre las líneas 16 y 17 vamos a declarar las variables que vamos a utilizar.

La línea 20 es para limpiar el rango en el que están los datos que estamos extrayendo de la página.

En la linea 22 vamos a iterar de 1 a 100, esperando que la respuesta de la página no nos genere mas de 100 vuelos.

De la línea 25 en adelante, es donde se vamos a extraer los datos de la página, los vamos a procesar y a colocar en excel.

Tomemos como ejemplo la línea 25 donde se extrae la aerolínea. Recuerdan cuando en el Post 2 hicimos la inspección de la página y logramos determinar el id de la etiqueta span? Ese id lo vamos a utilizar en esta parte. Si revisamos esa línea de programación por partes vamos a entender cada uno de sus componentes y para que sirven:


getElementsByTagName( ): Esta línea de código se encarga de buscar dentro del documento html la etiqueta que le pasemos en los argumentos. En este ejemplo, va a buscar la etiqueta: span

En el paréntesis que le sigue, vamos a ingresar el id de la etiqueta: mainContent_GrillaEstadoVuelo1_GridVuelos_LabelAerolinea_1. Solo que vamos a aplicarle un truco y es utilizar el valor de la variable i, y que a medida que vayamos iterando, iremos consultando la etiqueta de cada vuelo. Recuerden para el primer vuelo la etiqueta termina en 1, para el segundo en 2 y así para los demás. La parte final que dice: InnerText, se encarga de extraer el texto.

En la linea 26 se hace lo mismo que en la 25 pero para el número de vuelo y la línea 28 une las dos variables y se las lleva para el excel a la columna A del rango donde vamos a colocar los resultados de la extracción.

Y la misma tarea se repite para las demás variables y para cada uno de los vuelos de la ruta que estamos consultando.

Por último vinculamos la macro con el botón de consultar, y al ejecutarla obtenemos el siguiente resultado:




4 comentarios:

  1. Excelentes los tres posts!!! Gracias!!!

    ResponderBorrar
  2. Por favor podrias continuar con mas detallados de web scrapping.Buen trabajo.

    ResponderBorrar
    Respuestas
    1. Hola jc, gracias por comentar. Viste este: http://eduardoalzate.blogspot.com/2017/04/nuevo-ejemplo-de-web-scraping.html

      Borrar
  3. Si lo deseo hacer con Google Chrome y no con IE como lo puedo hacer

    ResponderBorrar