Web scraping rudimentario con VBA/Excel

Estándar

Muchos ya sabemos que Excel nos permite importar datos desde diversas fuentes:

  • Archivos de texto (csv)
  • Bases de datos (Access u otras…)
  • Cubos de información
  • Archivos XML (que en teoría seria el reemplazo de los archivos de texto plano)
  • Desde Web

En este caso nos centraremos en las importaciones de datos desde la Web, si bien Excel dispone de un asistente que nos permite seleccionar tablas de datos (HTML) para ser volcadas a una hoja de cálculo y además dicho asistente proporciona la opción de actualizar (descargar los datos) “x” minutos según indiquemos entre otras opciones más… Pero habrá situaciones en los datos que tengamos que extraer de una página web no estén distribuidos en una tabla HTML con lo cual su importación se complica, es justo en estas situaciones cuando debemos echar mano de una técnica llamada Web scraping.

Pero… que es el Web scraping? La respuesta fácil y corta es: es una técnica para la extracción de datos de páginas web usando ciertas herramientas. Pueden consultar mayor información en la wikipedia.

Lenguajes como Python, Ruby y VBA permiten echar mano de esta técnica. En esta ocasión nos centraremos en VBA/Excel.


Option Explicit

Sub HTML()
Dim IE As Object 'IE es de tipo objeto

Set IE = CreateObject("InternetExplorer.Application") 'Creamos una instancia del navegador

With IE
.Visible = True 'hacemos visible el navegador
.navigate "es.wikipedia.org/wiki/VBA" 'le indicamos la direccion de la pagina

'mientras el navegador esta ocupado (cargando la pagina) hay que esperar, de no poner este bucle que compruebe
'el estado del navegador, se puede presentar un error al tratar de obtener datos del navegador que aun no han
'sido cargados, dentro del bucle podemos utilizar la instruccion DoEvents para poder procesar otros eventos en la
'aplicacion
While .busy 'bucle vacio
Wend

'en las siguiente instrucciones imprimimos el html de la pagina y el contenido de la misma a la ventana de
'inmediato
Debug.Print .document.body.innerhtml 'recupera el html de la pagina
Debug.Print .document.body.innertext 'recupera el texto de la pagina

'cerramos el navegador, de no poner esta opcion el navegador estara abierto consumiendo memoria y no nos daremos
'cuenta de ello si dejamos la propiedad visible en false
.Quit
End With
End Sub

Este ha sido un sencillo ejemplo de extracción, pero las aplicaciones del Web scraping pueden ser aun más complejas para permitirnos extraer ciertos datos de un documento HTML. Una de las aplicaciones más complejas que he realizado con esta técnica, es la programación de una macro para la extracción de datos de usuarios de un sitio web para armar una base de datos de prospectarían de clientes para una empresa para que gracias a dios ya no trabajo! jajaja

Web scraping el libro excel 2007 con el codigo de ejemplo!

Anuncios

19 comentarios en “Web scraping rudimentario con VBA/Excel

  1. Ricardo

    Hola, he buscado pero aún no encuentro nada muy útil.
    Alguien sabe como subir archivos a una pagina web?
    Hasta ahora, he podido:
    -ingresar mi usuario y contraseña.
    -navegar con exito hasta la pagina donde debo subir el archivo.
    -abrir la ventana para seleccionar el archivo.

    Todo eso, sacando los ID de los distintos botones y cambiando las propiedades “.value”.

    Pero cuando abro la ventana para seleccionar el archivo, no se que hacer.

    Alguien conoce del tema?

    Perdón por no dar la URL de la página, pero es de la intranet de la empresa donde trabajo.
    Necesito cargar alrededor de 4000 pdf’s que imprimi en excel.

    Desde ya, gracias.

  2. Hola! tu caso es muy especifico… umm… quizás al tratarse de una una intranet, pudieras exponer tu caso con el administrador de la red y preguntarse si en lugar de ir subiendo los pdf de manera convencional pudiera ayudarte en ese aspecto con la carga masiva de todos ellos.

    Pudiera ser que también pudiera utilizar ftp, pero nunca he programado ello en VBA/Excel, pero parece que es posible. Por el momento es lo único que me viene a la mente.

    Ah… mencionas que solo llegas cuando te aparece el cuadro de examinar para seleccionar el archivo, quizás pudieras usar sendkkeys para enviar la ruta del archivo a cargar. Mas no puedo ayudarte. Saludos!

  3. isma

    buenas noches

    necesita extraer unos datos de web mediante macro de excel.

    agradeceria que me enviaras alguna consulta muy general (conexion con la pagina, variables …) para que lo pueda analizar y extrapolar a mis necesidades.

    si tienes material formativo o paginas en castellano de ayuda te estaría muy agradecido.

    para hacer algún ejemplo, puede entrar en la pagina marca.com para extraer datos sobre la clasificacion de liga.

    gracias

  4. Emilio Perez

    Si alguien puede ayudarme.
    Estas dos lineas me dan error:

    Debug.Print .document.body.innerhtml ‘recupera el html de la pagina
    Debug.Print .document.body.innertext ‘recupera el texto de la pagina

    El error es:
    Error 424 en tiempo de ejecución.
    Se requiere un objeto.
    Entiendo que el error es porque mi IE no tiene esa propiedad.
    Uso windows 7 con Office 2007, pero entiendo que eso no tiene por que ser
    un problema.

  5. elias

    yo estoy tratando de importar datos de una tabla de una pagina web que cambia constantemente quise hacerlo con excel pero solo me importa el titulo de la tabla no el contenido, probe tambien con la extencion data explorer pero tampoco reconoce la tabla. en cambio hay una extencion en firefox y chrome que si la reconoce se llama distill web monitor. necesito usar excel porque consume menos memoria la aplicacion distill me avisa de cambio pero no puedo vigilar mas de 200 numeros a la ves y me restringe mucho. la verdad estoy en un camino sin salida. que otro programa puedo usar para importar datos de internet a una velocidad de 1 pagina cada 30 segundos para analizarla?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s