Aprenda a raspar datos financieros usando Python

Publicado: 2019-04-26
Mostrar tabla de contenido
¿Por qué rastrear datos de Yahoo Finance?
¿Cómo extraer datos financieros de Web Scrape usando Python?
1. Comience con el código para raspar con Python
2. Explicación del código del rastreador
3. Algunos puntos de datos importantes que capturamos
¿Qué datos puede rastrear desde Yahoo Finance?
¿Qué otros datos financieros puede rastrear?
Casos usados ​​de Yahoo Finance Data
¿Necesita ayuda con la extracción de datos web?

El mercado de valores es una enorme base de datos con millones de entradas que se actualizan cada segundo. Si bien hay muchas empresas que proporcionan datos financieros de las empresas, por lo general es a través de una API (interfaz de programación de aplicaciones). Y como habrás adivinado, estas API nunca son gratuitas. Yahoo Finance es una fuente confiable de datos del mercado de valores y tiene una API paga. Lo guiaremos en un proceso paso a paso sobre cómo raspar los datos de Yahoo Finance usando Python.

¿Por qué rastrear datos de Yahoo Finance?

Si necesita datos financieros limpios y gratuitos de una fuente confiable, Yahoo Finance es su mejor opción. Las páginas web del perfil de la empresa están construidas en una estructura uniforme, lo que facilita el raspado web de python. Si escribe un script para rastrear datos de la página financiera de Microsoft, el mismo script también podría usarse para rastrear datos de la página financiera de Apple.

¿Cómo extraer datos financieros de Web Scrape usando Python?

Para la instalación y el comienzo, puede consultar los pasos básicos de este artículo sobre el raspado de datos de Python, donde discutimos cómo rastrear datos de un portal líder de reservas de hoteles. Una vez que haya instalado todas las dependencias junto con el editor de código Atom, comencemos con el scraping de Yahoo Finance con Python.

1. Comience con el código para raspar con Python

Una vez que se completan las etapas de instalación y configuración, podemos ir directamente al código e iniciar Yahoo Finance Scraping. El código se proporciona más abajo y se puede ejecutar usando solo el comando de Python.

cómo-raspar-los-datos-financieros-yahoo

Puede ejecutar el código de la manera que se muestra arriba. Cuando se le solicite, simplemente ingrese la URL de la empresa cuyo resumen financiero desea verificar. Hemos utilizado el enlace para Microsoft.

[lenguaje de código = "python"]
#!/usr/bin/python
# -*- codificación: utf-8 -*-
importar urllib.request
importar urllib.parse
importar urllib.error
de bs4 importar BeautifulSoup
importar ssl
importar json
importar ast
importar sistema operativo
de urllib.request Solicitud de importación, urlopen

# Para ignorar los errores del certificado SSL
ctx = ssl.create_default_context()
ctx.check_hostname=Falso
ctx.verify_mode = ssl.CERT_NONE

# Entrada del usuario
url = input('Ingrese la URL de la compañía financiera de Yahoo-')
# Hacer que el sitio web crea que está accediendo a él usando un navegador Mozilla
req = Solicitud (url, encabezados = {'Agente de usuario': 'Mozilla/5.0'})
página web = urlopen(req).read()
# Creación de un objeto BeautifulSoup de la página HTML para una fácil extracción de datos.

sopa = BeautifulSoup(página web, 'html.parser')
html = sopa.prettify('utf-8')
empresa_json = {}
otros_detalles = {}
para lapso en sopa.findAll('span',
attrs={'clase': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
para div en sopa.findAll('div', attrs={'clase': 'D(ib) Va(t)'}):
para intervalo en div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['PREV_CLOSE'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'OPEN-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['ABRIR'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'BID-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['BID'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'ASK-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['PEDIR'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['RANGO_DÍAS'] = span.text.strip()
para td en sopa.findAll('td',
attrs={'prueba-de-datos': 'CINCUENTA_DOS_WK_RANGE-valor'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['FIFTY_TWO_WK_RANGE'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['TD_VOLUME'] = span.text.strip()
para td en sopa.findAll('td',
attrs={'data-test': 'AVERAGE_VOLUME_3MES-valor'
}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['PROMEDIO_VOLUMEN_3MESES'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['MARKET_CAP'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['BETA_3Y'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['PE_RATIO'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['EPS_RATIO'] = span.text.strip()
para td en sopa.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
otros_detalles['FECHA_DE_GANANCIAS'] = []
para intervalo en td.findAll('span', recursive=False):
otros_detalles['FECHA_DE_GANANCIAS'].append(span.text.strip())
para td en sopa.findAll('td',
attrs={'prueba-de-datos': 'valor-DIVIDEND_AND_YIELD'}):
otros_detalles['DIVIDEND_AND_YIELD'] = td.text.strip()
para td en sopa.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['EX_DIVIDEND_DATE'] = span.text.strip()
para td en sopa.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-valor'
}):
para intervalo en td.findAll('span', recursive=False):
otros_detalles['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = otros_detalles
con open('data.json', 'w') como archivo de salida:
json.dump(company_json, outfile, sangría=4)
imprimir empresa_json
con open('output_file.html', 'wb') como archivo:
archivo.escribir(html)
print '———-La extracción de datos está completa. Compruebe el archivo json.———-'

[/código]

Una vez que ejecute el código e ingrese la URL de una empresa, verá un json impreso en su terminal. Este json también se guardará en un archivo con el nombre "data.json" en su carpeta. Para Microsoft, obtuvimos el siguiente JSON.

[lenguaje de código = "python"]
{
“PRESENT_GROWTH”: “+1.31 (+0.67%)”,
“VALOR_PRESENTE”: “197.00”,
"PREV_CLOSE": "195,69",
"ABIERTO": "196.45",
“OFERTA”: “196,89 x 900”,
“PEDIR”: “197.00 x 1400”,
“TD_VOLUMEN”: “18 526 644”,
“VOLUMEN_PROMEDIO_3MESES”: “29,962,082”,
“CAPÍTULO_MERCADO”: “928.91B”,
“BETA_3Y”: “0.91”,
“PE_RATIO”: “16.25”,
“EPS_RELACIÓN”: “12.12”,
“FECHA_GANANCIAS”: [
“30 de abril de 2019”
],
“DIVIDEND_AND_YIELD”: “2.92 (1.50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
“UN_AÑO_TARGET_PRICE”: “190.94”
}
[/código]

Para Apple, que últimamente ha tenido múltiples pérdidas, el JSON se veía así.

[lenguaje de código = "python"]

{
“VALOR_PRESENTE”: “198.87”,
“PRESENT_GROWTH”: “-0.08 (-0.04%)”,
"OTROS DETALLES": {
"PREV_CLOSE": "198,95",
"ABIERTO": "199.20",
“OFERTA”: “198,91 x 800”,
“PEDIR”: “198.99 x 1000”,
“TD_VOLUMEN”: “27,760,668”,
“VOLUMEN_PROMEDIO_3MESES”: “28,641,896”,
“CAPÍTULO_MERCADO”: “937.728B”,
“BETA_3Y”: “0.91”,
“PE_RATIO”: “16.41”,
“EPS_RELACIÓN”: “12.12”,
“FECHA_GANANCIAS”: [
“30 abr 2019”
],
“DIVIDEND_AND_YIELD”: “2.92 (1.50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
“UN_AÑO_TARGET_PRICE”: “193.12”
}
}

[/código]

Puede hacer lo mismo con cualquier número de empresas que desee y con la frecuencia que desee para mantenerse actualizado.

2. Explicación del código del rastreador

Al igual que los códigos web scraping anteriores, en este también obtuvimos primero el archivo HTML completo. A partir de eso, identificamos las etiquetas específicas (con clases específicas) que tenían los datos que necesitábamos. Este paso se realizó manualmente para una sola página de detalles de la empresa. Una vez que se identificaron las etiquetas específicas y sus respectivas clases, usamos una sopa hermosa para sacar esas etiquetas, usando nuestro código.

Luego, de cada una de esas etiquetas, copiamos los datos necesarios en una variable llamada company_json. Este es el json que finalmente escribimos en un archivo de tipo JSON llamado data.json. Puede ver que también guardamos el HTML raspado en un archivo llamado archivo_salida.html en su memoria local. Esto se hace para que pueda analizar la página HTML usted mismo y encontrar otras técnicas de python para rastrear más datos.

3. Algunos puntos de datos importantes que capturamos

  • PREV_CLOSE: Se refiere al precio de cierre de una acción el día anterior a la negociación. El valor del día anterior de una acción se refiere únicamente al último precio de cierre en un día en que el mercado de valores estaba abierto (no festivos).
  • OPEN: El precio de apertura, también llamado Open, es el precio de salida de una acción en un día de negociación. Por ejemplo, el precio de apertura de cualquier mercado de valores en la Bolsa de Valores de Nueva York (NYSE) sería su precio a las 9:30 a. m., hora del Este.
  • BID & ASK: Ambos precios son cotizaciones de una sola acción. La oferta se refiere al precio que los compradores están dispuestos a pagar por él, mientras que la demanda es por lo que los vendedores están dispuestos a venderlo. El multiplicador se refiere al número de acciones pendientes de negociación a sus respectivos precios.
  • TD_VOLUME: Es simplemente la cantidad de acciones que cambiaron de manos durante el día.
  • PE_RATIO: Probablemente el factor individual más importante que analizan los inversores, se calcula dividiendo el precio de mercado actual de las acciones de una empresa por las ganancias por acción de la empresa. En pocas palabras, es la suma de dinero que uno está dispuesto a pagar por cada rupia de las ganancias de la empresa.

La razón por la que explicamos algunos de los puntos de datos importantes es que queríamos que supiera qué tan profundo puede sumergirse en las finanzas de una empresa, simplemente extrayendo datos de su página de Finanzas de Yahoo.

¿Qué datos puede rastrear desde Yahoo Finance?

Podrá rastrear diferentes puntos de datos utilizando este raspador de Python. El valor actual y el porcentaje actual de crecimiento o caída es de suma importancia. Los otros puntos de datos, cuando se ven juntos, presentan una mejor imagen y ayudan a decidir si invertir en acciones de una empresa sería una buena idea o no. Sin embargo, mirar una instantánea de los datos podría no resultar demasiado efectivo. Extraer los datos a intervalos regulares y usar un gran conjunto de datos para predecir los precios futuros de las acciones podría resultar más útil a largo plazo.

¿Qué otros datos financieros puede rastrear?

Los datos financieros que extrajimos provienen de la página de resumen de una empresa en Yahoo Finance. Cada empresa también tiene una página de gráficos, donde puede ver los datos de acciones de hasta cinco años. Si bien los datos no están exactamente muy estructurados, poder rastrearlos podría brindarle una muy buena perspectiva del rendimiento histórico de las acciones de una empresa.

La página de estadísticas le brinda más de treinta puntos de datos diferentes, además de los que capturamos. Estos están en un formato estructurado y se pueden raspar usando un código similar al que proporcionamos.

Los datos históricos contienen datos de la página del gráfico, pero en un formato similar a un CSV: puede extraer fácilmente los datos y almacenarlos en un CSV. Otras páginas como el perfil, las finanzas, el análisis, las opciones, los titulares y la sostenibilidad pueden brindarle una buena estimación de cómo se comportarán las acciones de la empresa en comparación con sus competidores.

Casos usados ​​de Yahoo Finance Data

Puede usar los datos históricos para predecir los precios de las acciones, o puede crear una aplicación que use datos actualizados regularmente de su motor de extracción para proporcionar actualizaciones a los usuarios. Puede recomendar cuándo uno debería vender sus acciones o cuándo debería comprar más: ¡las posibilidades son infinitas!

En caso de que tenga un equipo pequeño y no pueda decidir cómo comenzar con el web scraping, puede recibir la ayuda de un equipo de web scraping comprometido y experimentado como PromptCloud. Nuestro panel de recopilación de requisitos de raspado web hace que enviar requisitos, obtener un presupuesto y, finalmente, obtener los datos en un formato plug and play sea un proceso simple y directo.


¿Necesita ayuda con la extracción de datos web?

Obtenga datos limpios y listos para usar de sitios web para aplicaciones comerciales a través de nuestros servicios de web scraping.

¡Ups! No pudimos localizar su formulario.

Descargo de responsabilidad: el código proporcionado en este tutorial es solo para fines de aprendizaje. No somos responsables de cómo se usa y no asumimos ninguna responsabilidad por cualquier uso perjudicial del código fuente.