Aprenda a extrair dados financeiros usando Python

Publicados: 2019-04-26
Índice mostrar
Por que rastrear dados do Yahoo Finance?
Como extrair dados financeiros da Web usando Python?
1. Comece com o código para raspagem com Python
2. Explicação do código do rastreador
3. Alguns pontos de dados importantes que capturamos
Quais dados você pode rastrear do Yahoo Finance?
Que outros dados financeiros você pode rastrear?
Casos usados ​​de dados do Yahoo Finance
Precisa de ajuda para extrair dados da web?

O mercado de ações é um enorme banco de dados com milhões de entradas que são atualizadas a cada segundo. Embora existam muitas empresas que fornecem dados financeiros de empresas, geralmente é por meio de uma API (interface de programação de aplicativos). E como você deve ter adivinhado, essas APIs nunca são gratuitas. O Yahoo Finance é uma fonte confiável de dados do mercado de ações e possui uma API paga. Vamos orientá-lo em um processo passo a passo sobre como extrair dados do Yahoo Finance usando Python.

Por que rastrear dados do Yahoo Finance?

Se você precisar de dados financeiros limpos e gratuitos de uma fonte confiável, o Yahoo Finance é sua melhor aposta. As páginas da web de perfil da empresa são construídas em uma estrutura uniforme, facilitando o python de raspagem da web. Se você escrever um script para rastrear dados da página financeira da Microsoft, o mesmo script também poderá ser usado para rastrear dados da página financeira da Apple.

Como extrair dados financeiros da Web usando Python?

Para a instalação e introdução, você pode consultar as etapas básicas deste artigo sobre python de raspagem de dados, onde discutimos como rastrear dados de um portal líder de reservas de hotéis. Depois de instalar todas as dependências junto com o editor de código Atom, vamos começar raspando o Yahoo Finance com Python.

1. Comece com o código para raspagem com Python

Quando os estágios de instalação e configuração estiverem concluídos, podemos ir direto ao código e iniciar o Yahoo Finance Scraping. O código é dado mais abaixo e pode ser executado usando apenas o comando Python.

como raspar dados de finanças do yahoo

Você pode executar o código da maneira mostrada acima. Quando solicitado, basta inserir a URL da empresa cujo resumo financeiro você deseja verificar. Usamos o link para Microsoft.

[linguagem de código=”python”]
#!/usr/bin/python
# -*- codificação: utf-8 -*-
importar urllib.request
importar urllib.parse
importar urllib.error
de bs4 importe BeautifulSoup
importar ssl
importar json
importação ast
importar SO
de urllib.request solicitação de importação, urlopen

# Para ignorar erros de certificado SSL
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# Entrada do usuário
url = input('Digite o URL da empresa do Yahoo Finance-')
# Fazendo o site acreditar que você está acessando usando um navegador Mozilla
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
página da web = urlopen(req).read()
# Criando um objeto BeautifulSoup da página HTML para fácil extração de dados.

sopa = BeautifulSoup(página da web, 'html.parser')
html = sopa.prettify('utf-8')
empresa_json = {}
other_details = {}
para intervalo em sopa.findAll('span',
attrs={'class': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
para div em soup.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
para span em div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
para span em td.findAll('span', recursive=False):
other_details['PREV_CLOSE'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
para span em td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'BID-value'}):
para span em td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'ASK-value'}):
para span em td.findAll('span', recursive=False):
other_details['ASK'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
para span em td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
para td em sopa.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
para span em td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
para span em td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
para td em sopa.findAll('td',
attrs={'data-test': 'AVERAGE_VOLUME_3MONTH-value'
}):
para span em td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
para span em td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
para span em td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
para span em td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
para span em td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
para td em soup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
other_details['EARNINGS_DATE'] = []
para span em td.findAll('span', recursive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
para td em sopa.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-value'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
para td em sopa.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
para span em td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
para td em sopa.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-value'
}):
para span em td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = other_details
com open('data.json', 'w') como outfile:
json.dump(company_json, outfile, indent=4)
imprimir empresa_json
com open('output_file.html', 'wb') como arquivo:
arquivo.write(html)
print '———-A extração de dados está completa. Verifique o arquivo json.———-'

[/código]

Depois de executar o código e inserir a URL da empresa, você verá um json impresso em seu terminal. Este json também será salvo em um arquivo com o nome “data.json” em sua pasta. Para a Microsoft, obtivemos o seguinte JSON.

[linguagem de código=”python”]
{
“PRESENT_GROWTH”: “+1,31 (+0,67%)”,
“PRESENT_VALUE”: “197,00”,
“PREV_CLOSE”: “195,69”,
“ABERTO”: “196,45”,
“BID”: “196,89 x 900”,
“PERGUNTAR”: “197,00 x 1400”,
“TD_VOLUME”: “18.526.644”,
“AVERAGE_VOLUME_3MONTH”: “29.962.082”,
“MARKET_CAP”: “928.91B”,
“BETA_3Y”: “0,91”,
“PE_RATIO”: “16.25”,
“EPS_RATIO”: “12.12”,
“GANHO_DATA”: [
“30 de abril de 2019”
],
“DIVIDEND_AND_YIELD”: “2,92 (1,50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
“ONE_YEAR_TARGET_PRICE”: “190,94”
}
[/código]

Para a Apple, que vem tendo várias perdas ultimamente, o JSON ficou assim.

[linguagem de código=”python”]

{
“PRESENT_VALUE”: “198,87”,
“PRESENT_GROWTH”: “-0,08 (-0,04%)”,
"OUTROS DETALHES": {
“PREV_CLOSE”: “198,95”,
“ABERTO”: “199,20”,
“BID”: “198,91 x 800”,
“PERGUNTAR”: “198,99 x 1000”,
“TD_VOLUME”: “27.760.668”,
“AVERAGE_VOLUME_3MONTH”: “28.641.896”,
“MARKET_CAP”: “937.728B”,
“BETA_3Y”: “0,91”,
“PE_RATIO”: “16.41”,
“EPS_RATIO”: “12.12”,
“GANHO_DATA”: [
“30 de abril de 2019”
],
“DIVIDEND_AND_YIELD”: “2,92 (1,50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
“ONE_YEAR_TARGET_PRICE”: “193,12”
}
}

[/código]

Você pode fazer o mesmo com qualquer número de empresas que desejar e com a frequência que desejar para se manter atualizado.

2. Explicação do código do rastreador

Como os códigos de raspagem da Web anteriores, neste também obtivemos primeiro o arquivo HTML inteiro. A partir disso, identificamos as tags específicas (com classes específicas) que continham os dados que precisávamos. Esta etapa foi feita manualmente para uma única página de detalhes da empresa. Uma vez que as tags específicas e suas respectivas classes foram identificadas, usamos uma bela sopa para tirar essas tags, usando nosso código.

Em seguida, de cada uma dessas tags, copiamos os dados necessários para uma variável chamada company_json. Este é o json que eventualmente escrevemos em um arquivo do tipo JSON chamado data.json. Você pode ver que também salvamos o HTML raspado em um arquivo chamado output_file.html em sua memória local. Isso é feito para que você mesmo possa analisar a página HTML e criar outras técnicas python de raspagem de dados para rastrear mais dados.

3. Alguns pontos de dados importantes que capturamos

  • PREV_CLOSE: Refere-se ao preço de fechamento de uma ação no dia anterior de negociação. O valor do dia anterior de uma ação refere-se apenas ao último preço de fechamento em um dia em que o mercado de ações estava aberto (não feriados).
  • OPEN: O preço de abertura também conhecido como Open, é o preço inicial de uma ação em um dia de negociação. Por exemplo, o preço de abertura de qualquer mercado de ações na Bolsa de Valores de Nova York (NYSE) seria seu preço às 9h30, horário do leste.
  • BID & ASK: Ambos os preços são cotações em uma única ação do estoque. O lance refere-se ao preço que os compradores estão dispostos a pagar por ele, enquanto o pedido é o que os vendedores estão dispostos a vendê-lo. O multiplicador refere-se ao número de ações pendentes de negociação em seus respectivos preços.
  • TD_VOLUME: É simplesmente o número de ações que mudaram de mãos durante o dia.
  • PE_RATIO: Provavelmente o fator mais importante que os investidores analisam, é calculado dividindo o preço de mercado atual das ações de uma empresa pelo lucro por ação da empresa. Simplificando, é a soma de dinheiro que alguém está disposto a pagar por cada rupia dos ganhos da empresa.

A razão pela qual explicamos alguns dos pontos de dados importantes é que queríamos que você soubesse o quão profundo você pode mergulhar nas finanças de uma empresa, apenas extraindo dados de sua página do Yahoo Finance.

Quais dados você pode rastrear do Yahoo Finance?

Você poderá rastrear diferentes pontos de dados usando este raspador Python. O valor presente e a porcentagem atual de crescimento ou queda são de extrema importância. Os outros pontos de dados, quando vistos em conjunto, apresentam uma imagem melhor e ajudam a decidir se investir nas ações de uma empresa seria uma boa ideia ou não. No entanto, olhar para um instantâneo dos dados pode não ser muito eficaz. Raspar os dados em intervalos regulares e usar um grande conjunto de dados para prever os preços futuros das ações pode servir para ser mais útil a longo prazo.

Que outros dados financeiros você pode rastrear?

Os dados financeiros que coletamos são da página de resumo de uma empresa no Yahoo Finance. Cada empresa também tem uma página de gráfico, onde você pode ver os dados de ações por até cinco anos. Embora os dados não sejam exatamente muito estruturados, poder rastreá-los pode fornecer uma visão muito boa do desempenho histórico das ações de uma empresa.

A página de estatísticas oferece mais de trinta pontos de dados diferentes, além dos que capturamos. Eles estão em um formato estruturado e podem ser copiados usando um código semelhante ao que fornecemos.

Os dados históricos contêm dados da página do gráfico, mas em um formato semelhante a um CSV – você pode facilmente extrair os dados e armazená-los em um CSV. Outras páginas como perfil, finanças, análise, opções, titulares e sustentabilidade podem lhe dar uma boa estimativa de como as ações da empresa irão se comportar em comparação com seus concorrentes.

Casos usados ​​de dados do Yahoo Finance

Você pode usar os dados históricos para prever os preços das ações ou criar um aplicativo que use dados atualizados regularmente de seu mecanismo de raspagem para fornecer atualizações aos usuários. Você pode recomendar quando alguém deve vender suas ações ou quando deve comprar mais – as possibilidades são infinitas!

Caso você tenha uma equipe pequena e não consiga decidir como começar com a raspagem da web, pode contar com a ajuda de uma equipe de raspagem da web comprometida e experiente, como o PromptCloud. Nosso painel de coleta de requisitos de raspagem da web torna o envio de requisitos, a obtenção de uma cotação e, finalmente, a obtenção dos dados em um formato plug and play um processo simples e direto.


Precisa de ajuda para extrair dados da web?

Obtenha dados limpos e prontos para uso de sites para aplicativos de negócios por meio de nossos serviços de web scraping.

Ops! Nós não conseguimos localizar seu formulário.

Isenção de responsabilidade: O código fornecido neste tutorial é apenas para fins de aprendizado. Não somos responsáveis ​​pela forma como ele é usado e não assumimos qualquer responsabilidade por qualquer uso prejudicial do código-fonte.