Jump to content

Archived

This topic is now archived and is closed to further replies.

digitalboy

Obteniendo la temperatura de los próximos días

Recommended Posts

En esta ocasión vamos a extraer la temperatura de un portal de internet, de la siguiente página: openweathermap.org/city/3530597 que muestra la temperatura de los próximos días de la ciudad de México.

Para efectuar esta tarea haremos uso del objeto Internet Explorer para poder navegar a dicha página y una vez cargada la misma empezamos a realizar la extracción del texto correspondiente y lo vaciamos en las celdas de nuestro libro.

Antes que nada tendremos que agregar la referencia necesaria para trabajar con el navegador de la siguiente forma:


Sub Clima()
Dim oIE As InternetExplorer
Dim sContenido As String
Dim lPosicion As Long
Dim vContenido As Variant
Dim i As Integer

Set oIE = New InternetExplorer 'aqui se crea y se ejecuta una instancia del navegador

With oIE
.Visible = True 'con esta instruccion hacemos visible el navegador
.Navigate "http://openweathermap.org/city/3530597"

'esperamos hasta que se haya cargado la pagina en el navegador
While .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend

sContenido = .Document.body.innertext 'se almacenatodo el texto desplegado por la pagina

'vemos que la cadena "next days" solo aparece una vez en el texto de la pagina y de ahi en adelante viene la
'temperatura de los dias siguiente...
lPosicion = InStr(1, sContenido, "Next Days", vbTextCompare) 'encontramos su posicion
sContenido = Mid(sContenido, lPosicion + Len("Next Days"), 1000) 'cortamos la cadena
vContenido = Split(sContenido, vbNewLine) 'spliteamos por linea de texto

'procesamos cada linea de texto, vemos que las lineas que nos interesan tienen una ma longitud menor a
'40 caracteres (a ojo de buen cubero)
For i = LBound(vContenido) To UBound(vContenido)
If Len(vContenido(i)) > 0 And Len(vContenido(i)) < 40 Then
Range("A65500").End(xlUp).Offset(1, 0) = vContenido(i) 'escribos la info en nuestra hoja de excel
End If
Next

.Quit 'cerramos el navegador para que no cnsuma memoria
MsgBox "Temperaturas extraidas con éxito", vbInformation
End With
End Sub

[/CODE]

El resto del articulo junto con la macro y codigo de ejemplo pueden descargaro de:

Web scraping – Obteniendo la temperatura de los próximos días

Saludos!

Link to post
Share on other sites



  • Posts

    • Hola Alexander, He encontrado una solución que creo que me va. ¿Seras tan amable de revisar y decirme si esta correcto lo que he aplicado? Tambien quiero que me digas si voy de buen camino y si puedo utilizar la misma función para otras celdas - Range("D5").Offset(, 0).Value = LCase(Target) Saludos,
    • hola wess   (y Christian) De tu explicación entiendo una cosa, entiendo que Christian se basó en eso para resolver tu tema.  Pero de tu ejemplo, no entiendo nada.. por ejemplo, en Resultado Esperado, de donde sale el productob en Marzo 61 y de Enero a Diciembre 437 si en tu tabla de Datos el productob tiene un único movimiento en Marzo y es 437, entonces, de donde sale 61?? y del resto ya mejor ni digo nada.. 😵   saludos Silvia
    • Un gusto @Sergio, sinceramente no sabría recomendarte alguna pagina o vídeo en concreto, la cinta que vez arriba la hice con una recopilación de paginas y un poco de prueba y error. Pero te aseguro que no es tan complicado como parece, seguro que con leer un poco  de la documentación del programa le agarras el tiro https://bettersolutions.com/vba/ribbon/custom-ui-editor.htm Saludos.
    • Buenas tardes Alexander, Perfecto. De hecho si que necesito decir para algunas celdas individualmente que tipo de fuente aparezca (Ucas;  Lcase; PROPER). Hasta tu respuesta ire probando. Gracias. Saludos,  
    • MI ESTIMADO  @AlexanderS,  ES JUSTO LO QUE QUERÍA, DE VERDAD NO LO HUBIESE PODIDO HACER DE ESA MANERA TAN SIMPLE COMO TU LO HAS HECHO, Y SE ME OCURRIÓ POR AHÍ AGREGAR UNA LINEA PARA BORRAR EL CONTENIDO ANTES DE OBTENER LAS NUEVAS RECETAS...... Sub Copia_recetas()     Dim Rng$, x#     Dim rept        As Range     Dim celda     With Sheets("BD_Recetas")        Rng = .Range("D1")        Range("C9:C43").ClearContents   -   AGREGUE ESTA LINEA        x = 9        For Each celda In Sheets("Proy.-Comer").Range(Rng)        If celda <> "" Then                 Set rept = .Range("C9:C43").Find(celda, , , xlWhole)                 If rept Is Nothing Then _                    .Cells(x, "C") = celda: x = x + 1                 End If         Next     End With End Sub MUCHAS GRACIAS POR TU APOYO ERES UN GENIO, Y POR LA EXCELENTE LECCIÓN QUE ME HAS DADO, ESTOY HACIENDO UN LIBRO DE PRODUCCIÓN INDUSTRIAL, Y SE QUE NECESITARE DE MAS AYUDA PARA PODER CULMINARLO. SI TENGO OTRA CONSULTA ESPERO PODER MOLESTARTE Y QUITARTE ALGO DE TIEMPO. MILES DE GRACIAS,. Y BENDICIONES.        
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy