sábado, 22 de octubre de 2016

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

Bueno, como siempre suele suceder con el excel, aquí va una de esas cosas que jamas me hubiera esperado se pudieran hacer con esta hoja de cálculo y una macro. 

El tema es hacer scraping a una página utilizando el poderoso vba para crear una macro que nos permita obtener información desde una página web. El post lo voy a dividir en tres entregas.

En esta primera parte, vamos a revisar un poco de teoría sobre como funciona internet, para que podamos saber e identificar que esta haciendo nuestra macro. 

En la segunda parte, revisaremos el proceso de inspeccionar las páginas web y en la tercera y última vamos a construir la macro que nos va a permitir realizar el scraping. 

Prometo mas adelante dedicarle un post completo al uso y consumo de servicios web desde excel.

Empecemos por revisar lo que ocurre cuando desde un navegador común y corriente, como internet explorer, chrome o mozilla ingresamos la dirección de una página web en internet. Lo primero es que cuando damos enter en la barra de navegación, se envía una petición al servidor en el cuál se encuentra alojada la página web que queremos consultar, por ejemplo:




Lo que acaba de ocurrir, es que se envió una solicitud utilizando una petición GET o una petición POST. La primera es la que realmente nos interesa, pues es la que nos va a permitir realizar el scraping.

De seguro que técnicamente  existe una explicación muy completa para poder entender cada una de estas solicitudes, pero para nuestro caso la diferencia que nos importa es que la solicitud GET envía los valores que tienen las diferentes variables que va a recibir el servidor y las muestra en la barra de navegación del explorador, mientras que la solicitud POST, incluye esos valores en el cuerpo de la solicitud y por lo tanto no los podemos ver.

De vuelta en el navegador, si damos clic en el botón de: Estado de los vuelos, veremos lo siguiente:





En esta página, tenemos un formulario en el que podemos seleccionar entre dos opciones para realizar nuestra búsqueda: Ruta o Número de Vuelo. Para nuestro caso vamos a buscar por Ruta. Y tenemos tres valores que debemos suministrar:
  1. La ciudad de origen
  2. La ciudad de destino
  3. La fecha de vuelo
Para nuestro ejemplo, vamos a ingresar los siguientes datos:
  1. ciudad de origen: Cali
  2. ciudad de destino: Bogotá
  3. Fecha: 22/10/2016
Y nos debe quedar así:




El siguiente paso es dar clic en Consultar y se genera la siguiente página:




Que es el listado de los vuelos de la ruta Cali-Bogotá para el día 22 de Octubre de 2016. Vamos a resumir lo que ocurrió:
  1. Rellenamos el formulario de la página con las variables de nuestro interés: ciudad de origen, ciudad de destino y fecha.
  2. Dimos clic en consultar y nuestro navegador envió una solicitud tipo GET al servidor para que la procesara.
  3. Y al final el servidor envía de vuelta el resultado a nuestro navegador y podemos visualizar el estado de los vuelos.
Como sabemos que la solicitud enviad es de tipo GET? Si nos fijamos en la última imagen y vemos la barra del navegador podremos encontrar, el nombre del script y las tres variables:




De la dirección que aparece en el navegador:

ResultadoEstadoVuelos.aspx?idioma=es&pais=CO&ORG=CO-CLO&DES=CO-BOG&FEC=22/10/2016

Podemos extraer:

El nombre del script es: ResultadoEstadoVuelos.aspx
El nombre de la variable origen y el valor que le asignó en el formulario: ORG=CO-CLO
El nombre de la variable destino y el valor asignado: DES=CO-BOG
El nombre de la variable fecha y el valor asignado: FEC=22/10/2016

Donde CLO es la nomenclatura para identificar la ciudad de Cali y BOG la nomenclatura para identificar Bogotá.

El caracter ? Es utilizado para indicar que ahi inicia la combinación variables y valores. El caracter & se utiliza para separar las diferentes variables.

Hasta aquí la primera parte, es muy conceptual pero es necesaria para que podamos entender lo que va a hacer la macro que vamos a construir en la tercera parte de este post.



3 comentarios:

  1. Buenas tardes, necesito que me ayudes desarrollando una aplicación de wed scraping de esta pagina http://appscvsmovil.supercias.gob.ec/PortalInfor/consultaPrincipal.zul
    Este es mi correo jcmora@molsando.com.ec si le interesa por favor me escribe

    ResponderBorrar
  2. buenas noches, necesito que me ayude a poder extraer de la pagina de paypal las compras que realicé. Es posible realizar esta acción con macros para vba.

    ResponderBorrar
  3. Hola kiciera que me bajes la pajina mercadolibre contactame

    ResponderBorrar