Cómo recoger datos concretos de acciones específicas de una web en excel

Tengo un Excel con una columna con los nombres de unas acciones que cotizan en diferentes mercados mundiales. Quisiera saber si, desde una web especializada en bolsa, se puede recoger un dato concreto de cada una de esas acciones que tengo, y colocarlo en la celda contigua a esa acción.

Imagino que sería a través de programación algo compleja.

3 Respuestas

Respuesta
1

Puede que VBA no sea la mejor herramienta. De todos modos, solo por diversión, escribí un código muy contundente

Option Explicit
Public Sub Download()
    ' Declaraciones.
    Dim xmlhttp As New MSXML2.XMLHTTP60
    Dim StrURL As String
    Dim StrResult As String
    Dim StrMessageTitle As String
    Dim StrMessageContent As String
    Dim VarResult() As Variant
    Dim RngResult As Range
    Dim DblCounter As Double
    ' Configuración.
    Set RngResult = Range("A1") ' Cambia esto si quieres colocar los resultados en otra celda
    ' Establecer la URL de la página.
    StrURL = "https://finance.yahoo.com/quote/VOO?p=VOO&.tsrc=fin-srch"
    ' Limpiar la columna de RngResult.
    RngResult. EntireColumn. ClearContents
    ' Configuración de la solicitud.
    xmlhttp.Open "GET", StrURL, False
    ' Enviar la solicitud.
    xmlhttp.send
    ' Comprobación de la respuesta.
    If xmlhttp.responseText <> "" Then
        ' Extracción del título.
        StrMessageTitle = Split(xmlhttp.responseText, "<title>")(1)
        StrMessageTitle = Split(StrMessageTitle, "</title>")(0)
        StrMessageTitle = HtmlDecode(StrMessageTitle)
        ' Extracción del precio usando un split. Asegúrate de que el HTML coincida con esta estructura.
        StrMessageContent = Split(xmlhttp.responseText, "class=""Fw(b) Fz(36px) Mb(-4px) D(ib)""")(1)
        StrMessageContent = Split(StrMessageContent, "</fin-streamer>")(0)
        StrMessageContent = Split(StrMessageContent, ">")(1)
        ' Colocar el valor del precio en una celda en lugar de MsgBox.
        RngResult.Offset(0, 1).Value = StrMessageContent
        ' Si quieres ver el contenido completo de la respuesta en la hoja de Excel.
        StrResult = xmlhttp.responseText
        ReDim VarResult(1 To UBound(Split(StrResult, ">")), 1 To 1)
        For DblCounter = 0 To UBound(Split(StrResult, ">")) - 1
            VarResult(DblCounter + 1, 1) = Split(StrResult, ">")(DblCounter) & ">"
        Next
        Application.ScreenUpdating = False
        ' Colocar todo el contenido en la columna A.
        For DblCounter = 1 To UBound(VarResult)
            RngResult.Offset(DblCounter - 1, 0).Value2 = VarResult(DblCounter, 1)
        Next
        Application.ScreenUpdating = True
    End If
End Sub
Function HtmlDecode(str As String) As String
    ' Decodificación básica de caracteres HTML.
    Dim dom As Object
    Set dom = CreateObject("htmlfile")
    dom.Open
    dom.Write str
    dom.Close
    HtmlDecode = dom.body.innerText
End Function

Fuente:
https://stackoverflow-com.translate.goog/questions/76499653/extract-financial-data-from-webpage-to-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

Respuesta
1

I. Hola Daniel, en mi caso no fui capaz de encontrar la información necesaria ni soy experto, pero deseaba dejarle los resultados de una búsqueda en Inglés y en especial a ofrecerme para trasladar su consulta a un experto en caso de que no llegasen respuestas.

Pienso que podría recurrirse a realizar una macro mediante VBA, pero tampoco lo sé.

https://stackoverflow-com.translate.goog/questions/76499653/extract-financial-data-from-webpage-to-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

 https://www.youtube.com/watch?v=HZU2OtDa2eI 

Le ruego me disculpe todas las molestias de lectura, mucho ánimo.

https://oxylabs-io.translate.goog/blog/web-scraping-excel-web-query?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-octoparse-com.translate.goog/blog/scraping-data-from-website-to-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc&_x_tr_hist=true 

https://stackoverflow-com.translate.goog/questions/60643110/excel-get-data-from-web?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.youtube.com/watch?v=KHn-fbjJ_l4 

https://www.youtube.com/watch?v=EOhSODFLqic 

https://www.youtube.com/watch?v=oSxCUxyTjmI 

https://www.youtube.com/watch?v=rElBevSwC0s  

https://www-matthewdevaney-com.translate.goog/power-automate-desktop-data-entry-from-excel-to-website/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://stackoverflow-com.translate.goog/questions/6312780/sending-data-from-excel-to-server-using-http-post?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://docs.automationanywhere.com/es-ES/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/commands/example-extracting-data-from-excel-to-a-webform.html 

https://stackoverflow.com/questions/954087/sending-data-from-excel-to-a-website 

https://stackoverflow.com/questions/61108220/post-data-to-server-using-excel-add-in 

https://www.linkedin.com/pulse/c%C3%B3mo-usar-las-funciones-web-y-de-internet-con-excel-para-villena-sotae?originalSubdomain=es 

Respuesta
1

Sí, puedes recoger datos de acciones desde una web especializada en bolsa directamente en Excel, y aunque existen múltiples enfoques, uno de los más sencillos es usando Power Query o funciones nativas de Excel para obtener datos en tiempo real desde una fuente web. Si quieres algo más personalizado, también puedes usar programación con VBA para automatizar la recolección de datos específicos desde una página web.

Aquí te describo dos enfoques diferentes: uno sin código (más simple) y otro usando VBA (más avanzado).

Opción 1: Usar Power Query para obtener datos desde la web (sin programación)

Excel tiene una herramienta muy útil llamada Power Query, que te permite conectarte a una página web y extraer datos automáticamente.

1. Paso 1: Accede a Power Query

En la pestaña Datos de Excel, selecciona Obtener datos > Desde la Web.

2. Paso 2: Introduce la URL de la página web de cotización

Introduce la URL de la página que tiene la información de las acciones (como Yahoo Finance o Google Finance).

3. Paso 3: Selecciona los datos que quieres extraer

Power Query analizará la página web y te mostrará una lista de tablas disponibles en esa página. Selecciona la tabla que contiene la información de las acciones que deseas.

4. Paso 4: Ajusta los datos

Puedes realizar ajustes en los datos que importas, filtrando las columnas que te interesan.

5. Paso 5: Cargar los datos en Excel

Una vez configurados los datos, haz clic en Cargar para traer la información a tu hoja de cálculo de Excel.

Esto te permite obtener los datos de las acciones desde la web y tenerlos automáticamente actualizados cada vez que refresques la conexión.

Opción 2: Usar VBA para obtener datos específicos de una web (más flexible y programado)

Si necesitas más flexibilidad y la web desde la cual quieres extraer los datos no tiene una tabla clara, puedes usar VBA para extraer información específica de una página web. Este método te permitirá hacer una búsqueda específica del dato (por ejemplo, precio de una acción) para cada símbolo que tengas en tu columna.

A continuación, te dejo un ejemplo de código VBA que puedes usar para buscar el precio de una acción desde Yahoo Finance.

1. Paso 1: Accede al Editor de VBA

Presiona Alt + F11 para abrir el editor de VBA en Excel.

Inserta un Nuevo Módulo: Insertar > Módulo.

2. Paso 2: Introduce el siguiente código VBA

Sub ObtenerPrecioAccion()
Dim http As Object
Dim url As String
Dim simbolo As String
Dim i As Integer
Dim precio As String
Dim ws As Worksheet

Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ThisWorkbook.Sheets("Hoja1") ' Ajusta el nombre de la hoja según sea necesario

' Supongamos que los símbolos de las acciones están en la columna A
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
simbolo = ws.Cells(i, 1).Value
url = "https://finance.yahoo.com/quote/" & simbolo & "?p=" & simbolo

' Realiza la solicitud a la página web
http.Open "GET", url, False
http.Send

' Extrae el dato que deseas (precio actual de la acción)
precio = Mid(http.responseText, InStr(http.responseText, """currentPrice"":{""raw"":") + 24, 10)
precio = Split(precio, ",")(0) ' Aísla el valor del precio

' Coloca el precio en la columna B
ws.Cells(i, 2).Value = precio
Next i
End Sub

3. Paso 3: Ejecutar el código VBA

Guarda y cierra el editor de VBA.

Ejecuta la macro ObtenerPrecioAccion presionando Alt + F8 y seleccionando la macro que acabas de crear.

Explicación del código:

Este código recorre los símbolos de acciones que tienes en la columna A de tu hoja de Excel y consulta el precio actual de esas acciones desde Yahoo Finance.

Extrae el precio de la acción utilizando un análisis básico del código HTML de la página web (en este caso, usando responseText y localizando el dato con Mid e InStr).

Coloca el precio de la acción en la columna B, junto al símbolo correspondiente.

Limitaciones:

Este método es básico y depende de la estructura de la página web. Si la estructura cambia o la página utiliza tecnologías como JavaScript para cargar datos dinámicamente, el método no funcionará bien sin ajustes.

Además, si haces muchas solicitudes de forma repetida, algunos sitios pueden bloquear tu IP debido a límites de uso. Es recomendable usar APIs oficiales si vas a extraer datos con frecuencia.

Opción 3: Usar APIs de mercado de valores (más avanzado y robusto)

Si prefieres una solución más profesional y robusta, puedes usar APIs como Yahoo Finance API, Alpha Vantage, o IEX Cloud para obtener datos del mercado de valores de manera más estructurada.

1. Paso 1: Obtener una API Key

Regístrate en servicios como Alpha Vantage, IEX Cloud, o Yahoo Finance API.

2. Paso 2: Usar Power Query o VBA para conectarte a la API

En lugar de conectarte a una página web, harías una llamada directa a la API para obtener los datos de cotización.

Ejemplo de una URL con Alpha Vantage:

https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=YOUR_API_KEY

Puedes usar Power Query o VBA para conectarte a la API, parsear los datos en formato JSON o CSV, y colocarlos en tu hoja de Excel.

Conclusión

Tienes varias opciones para recoger datos de acciones desde una web en Excel:

Power Query es una opción simple y sin código, ideal si puedes obtener datos tabulados desde una web.

VBA te da más flexibilidad si necesitas extraer datos de manera específica desde una web no estructurada.

APIs son una opción más robusta y profesional si buscas integraciones automatizadas y frecuentes con datos del mercado de valores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas