pyt_3_entradas.JPG

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:

pyt_3_entradas.JPG

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:

  1. Abrir la búsqueda correspondiente.
  2. Buscar la primera entrada relevante en la columna A.
  3. Copiar las celdas con información.
  4. 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.