Que pasa cuando hacemos click en el botón buscar de la pagina de búsquedas de la rae:
En el background el explorador envía una cadena de texto al servidor de la pagina, algo así como:
La parte hasta el signo de interrogación es la base para enviar todas las consultas a la pagina:
"w=" y "m=" son los campos del formulario que contienen los valores a consultar, de donde salen?
"w" es el atributo "name" del campo donde llenamos la palabra a buscar
"m" es el valor de la opción "exacta" en la lista desplegable.
Entonces en esta parte de la cadena de texto (o dirección web) que vamos a enviar el servidor, estamos especificando la palabra buscada y el tipo de definición:
Si quisieras buscar otras palabras, solo hay que actualizar el contenido de "w", hagan la prueba pegándolas en la barra de direcciones y vean la pagina que se les devuelve:
http://dle.rae.es/srv/search?w=productividad&m=30
http://dle.rae.es/srv/search?w=programar&m=30
http://dle.rae.es/srv/search?w=programa&m=30
De ahí en adelante es cuestión de leer la pagina y extraer los datos como ya se ha hecho en estos posts:
El Codigo esta dividido en una subrutina que abre el explorador y pasa las palabras a una función que extrae su definición:
Sub buscar_definicion()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Visible = False
ie.Navigate "http://dle.rae.es/"
While ie.readyState <> READYSTATE_COMPLETE
'Debug.Print ("Esperando carga de pagina")
Wend
Dim celda_palabra As Range
Dim palabra As String
For Each celda_palabra In Range("A2", "A11")
palabra = celda_palabra.Value
Debug.Print (palabra)
celda_palabra.Offset(0, 1).Value = buscar_palabra(ie, palabra)
Next
Set ie = New InternetExplorer
ie.Visible = False
ie.Navigate "http://dle.rae.es/"
While ie.readyState <> READYSTATE_COMPLETE
'Debug.Print ("Esperando carga de pagina")
Wend
Dim celda_palabra As Range
Dim palabra As String
For Each celda_palabra In Range("A2", "A11")
palabra = celda_palabra.Value
Debug.Print (palabra)
celda_palabra.Offset(0, 1).Value = buscar_palabra(ie, palabra)
Next
End Sub
Function buscar_palabra(ie As InternetExplorer, palabra As String)
Dim pagina As HTMLDocument
ie.Navigate "http://dle.rae.es/srv/search?w=" & palabra & "&m=30"
While ie.readyState <> 4
Debug.Print ("Descargando pagina")
Wend
Set pagina = ie.document
'chequea que exista un elemento <p> para comprobar que la pagina haya cargado
Dim elemento_parrafo As HTMLParaElement
While elemento_parrafo Is Nothing
Set pagina = ie.document
Set elemento_parrafo = pagina.getElementsByTagName("p")(0)
Wend
'chequea si el elemento p es definicion o no
Dim parrafo As HTMLParaElement
Set parrafo = pagina.getElementsByClassName("j")(0)
If parrafo Is Nothing Then
buscar_palabra = "Definicion no encontrada"
Exit Function
End If
Dim parcial As Variant
Dim texto_final As String
texto_final = ""
For Each parcial In parrafo.Children
texto_final = texto_final & parcial.innerHTML & " "
Next
Debug.Print (texto_final)
buscar_palabra = texto_final
End Function
ie.Navigate "http://dle.rae.es/srv/search?w=" & palabra & "&m=30"
While ie.readyState <> 4
Debug.Print ("Descargando pagina")
Wend
Set pagina = ie.document
'chequea que exista un elemento <p> para comprobar que la pagina haya cargado
Dim elemento_parrafo As HTMLParaElement
While elemento_parrafo Is Nothing
Set pagina = ie.document
Set elemento_parrafo = pagina.getElementsByTagName("p")(0)
Wend
'chequea si el elemento p es definicion o no
Dim parrafo As HTMLParaElement
Set parrafo = pagina.getElementsByClassName("j")(0)
If parrafo Is Nothing Then
buscar_palabra = "Definicion no encontrada"
Exit Function
End If
Dim parcial As Variant
Dim texto_final As String
texto_final = ""
For Each parcial In parrafo.Children
texto_final = texto_final & parcial.innerHTML & " "
Next
Debug.Print (texto_final)
buscar_palabra = texto_final
End Function
Hola, Buenos días... Copié el código tal cuál está en la página, pero al correr la macro todos los resultados (definiciones) aparecen como "Definición no encontrada); es decir, como si no se cumpliera la condición
ResponderEliminarIf parrafo Is Nothing Then
buscar_palabra = "Definicion no encontrada"
Exit Function
End If
¿Podrían ayudarme?
Muchas gracias...