En la anterior entrega del seguimiento de mi proyecto de minería de textos con Excel, creé un proceso que leía búsquedas de Google y las almacenaba en un fichero Excel que denominaba base. El problema que me encontré es que generaba un Excel con una gran cantidad de hojas y posteriormente tenía que leerlas y extraer la información de cada una. Esta metodología no me parece eficiente: es mejor leer una búsqueda, extraer la información relevante de ella e introducirla en mi tablón de datos.
Para extraer la información relevante de cada búsqueda, he de conocer muy bien cómo se almacena cada página web de Google en Excel. En un primer vistazo, obtengo esto:
Parece que todas las entradas relevantes aparecen en la columna A, tienen tres filas con datos y están separadas por dos filas. Todas las entradas que considero relevantes (no tabulo los enlaces patrocinados) finalizaban en aquel entonces con las palabras «Anotar esto».
Los pasos a seguir en mi proceso serían:
- Abrir la búsqueda correspondiente.
- Buscar la primera entrada relevante en la columna
A. - Copiar las celdas con información.
- Transponer y pegar las celdas copiadas para crear una tabla de datos.
Para abrir las búsquedas, ya creamos en su momento macros con Excel que las abrían. Buscar la primera entrada relevante requiere que diseñemos un nuevo proceso; con ayuda del asistente creamos una macro que nos identifica la fila con el primer registro relevante.
He creado una macro que cierra sin guardar (SaveChanges:=False) hojas de cálculo llamadas search para evitar abrir ficheros con el mismo nombre y luego he abierto dos búsquedas de Google con «formacion business intelligence» y las he añadido al archivo que me sirve de base: min.xls. Es evidente que este código puede recibir parámetros e índices para funcionar de forma automática.
En un primer acercamiento, puede ser interesante crear índices para las siguientes partes de mi código:
Workbooks.Open Filename:="http://www.google.es/search?hl=es&q=formacion+business+intelligence&meta="Workbooks.Open Filename:="http://www.google.es/search?q=formacion+business+intelligence&hl=es&start=10&sa=N"
El parámetro start= ha de ir creciendo de 10 en 10 porque marca el número de entrada de la búsqueda. Podemos modificar las opciones de Google, pero de momento las mantenemos. Otra parte del código que puede ser susceptible de indizar será:
After:=Workbooks("min.xls").Sheets(1)After:=Workbooks("min.xls").Sheets(2)
Indicamos el punto en el que copiamos la hoja que ha abierto la búsqueda. Siempre irá creciendo en una unidad. Con todo ésto, creamos el siguiente bucle:
Sub cierra()
Sheets("search").Select
Windows("search").Activate
ActiveWindow.Close SaveChanges:=False
End Sub
Sub Abre()
Dim direccion As String
Dim i As Integer
' Primera página de búsqueda
Workbooks.Open Filename:="http://www.google.es/search?hl=es&q=formacion+business+intelligence&meta="
Sheets("search").Select
Sheets("search").Copy After:=Workbooks("min.xls").Sheets(1)
cierra
' Páginas sucesivas
For i = 2 To 10
direccion = "http://www.google.es/search?q=formacion+business+intelligence&hl=es&start=" & (i - 1) * 10 & "&sa=N"
Workbooks.Open Filename:=direccion
Sheets("search").Select
Sheets("search").Copy After:=Workbooks("min.xls").Sheets(i)
cierra
Next i
End Sub
De momento abrimos sólo algunas entradas para comprobar el correcto funcionamiento del bucle. Parece que añadimos un gran número de hojas a nuestro archivo; parece importante tabular cada búsqueda que abrimos: nuestro proceso tiene que ser más «fino». Antes de leer datos, hemos de tener clara la estructura de nuestro tablón de datos. En la siguiente entrega será necesario determinar el número de observaciones con las que trabajaremos y qué variables hemos de preparar inicialmente.
Si no se ve correctamente esta entrada o no funciona el código, remitidme el problema a rvaquerizo@analisisydecision.es. Saludos.