Extracción de datos financieros de TradingView con Python: una guía paso a paso
¿Pasas horas buscando en la web los datos financieros más recientes para tomar decisiones de inversión? ¿Y si hubiera una forma de automatizar este tedioso proceso y obtener una ventaja competitiva? Es aquí donde podemos aplicar la extracción de datos web con Python.
En esta guía paso a paso, te mostraré cómo extraer datos bursátiles actualizados minuto a minuto de TradingView, una popular plataforma de análisis financiero, utilizando únicamente código en Python.
Pueden encontrar más información sobre el screener de la plataforma TradingView en: Screener 2.0 de TradingView
Inspeccionando el sitio web
El primer paso en cualquier proyecto de extracción de datos web es identificar la fuente de datos. Para TradingView, navegaremos a su página del filtro de acciones en https://www.tradingview.com/screener/.
Haz clic derecho en cualquier parte de la página y selecciona “Inspeccionar” (o presiona F12 en la mayoría de los navegadores). Esto abrirá las herramientas de desarrollador, lo que nos permitirá echar un vistazo detrás de escena.
A continuación, dirígete a la pestaña “Red” (o “Network”) y actualiza la página. Esto mostrará todas las solicitudes realizadas por el sitio web mientras se carga.
Búsqueda del endpoint de la API
Desplázate por las solicitudes de red hasta que encuentres algo prometedor; en nuestro caso, es la primera.
Si expandimos el 0: Object, podemos ver toda la información necesaria para la columna.
Haz clic derecho en esta solicitud y selecciona “Copiar como cURL“.
Ahora, abre una herramienta como Insomnia o Postman, pega el comando cURL y presiona enviar. ¡Deberías ver los mismos datos bursátiles aparecer en la respuesta!
Generando el código en Python
La mayoría de los clientes de API ofrecen una útil función de “Generar código de cliente“. En Insomnia, haz clic en el menú desplegable junto al botón de enviar y selecciona “Generar código de cliente“.
Copia el código generado en un nuevo archivo de Python en tu editor de preferencia. Modificaremos este código para obtener todos los datos bursátiles disponibles de TradingView.
Abre tu editor de código y pega el código.
Después de pegar el código, busca (usando ctrl + f) el “range” dentro de la carga útil y cámbialo a 15000, ya que tenemos un total de 14217 datos.
Análisis de la respuesta
data_json = response.json() lists = data_json["data"]
Ahora extraeremos todos los datos y los almacenaremos en una lista.
data_list = [] for item in lists: name = item['d'][0] price = item['d'][6] change = item['d'][12] volume = item['d'][13] relative_volume = item['d'][14] market_cap = item['d'][15] pe = item['d'][17] eps_diluted = item['d'][18] eps_diluted_growth = item['d'][19] dividends_yield = item['d'][20] sector = item['d'][22] data = { 'name': name, 'price': price, 'change': change, 'volume': volume, 'relative_volume': relative_volume, 'market_cap': market_cap, 'pe': pe, 'eps_diluted': eps_diluted, 'eps_diluted_growth': eps_diluted_growth, 'dividends_yield': dividends_yield, 'sector': sector } data_list.append(data)
Este código convierte la respuesta JSON en un diccionario de Python, luego recorre los datos y extrae los campos que te interesan (por ejemplo, nombre de la acción, precio, volumen, etc.).
Guardar los datos en un archivo CSV
Finalmente, guardemos nuestros datos recién extraídos en un archivo CSV para un análisis más sencillo:
with open('stocks_data.csv', 'w', newline='') as csvfile: fieldnames = ['name', 'price', 'change', 'volume', 'relative_volume', 'market_cap', 'pe', 'eps_diluted', 'eps_diluted_growth', 'dividends_yield', 'sector'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # Escribe la fila del encabezado writer.writeheader() # Escribe las filas de datos for data in data_list: writer.writerow(data)
¡Y ahí lo tienes! Has extraído con éxito datos financieros de TradingView utilizando Python.
Por supuesto, esto es solo el comienzo. Puedes analizar y visualizar aún más los datos utilizando las poderosas bibliotecas de ciencia de datos de Python, como pandas, matplotlib y seaborn.