Obtendo cotações da Bovespa usando Python

Eu estava em busca de alguma biblioteca que permitisse acessar os dados da Bovespa, de preferência os mais atuais. Existem algumas opções como a API do Yahoo Finance que permite, inclusive, obter gráficos com alguns indicadores, através de uma url, como a mostrada abaixo:

http://chart.finance.yahoo.com/z?s=PETR4.SA&t=6m&q=c&l=on&z=l&a=m26-12-9,&p=e13,e150,

Gráfico correspondente:

Clicando no link acima obtemos um gráfico candlestick de seis meses de cotações com os indicadores MACD, EMA-13 e EMA-150. Há um ano atrás implementei uma página acessando alguns papéis do meu interesse via javascript. O código está aqui no github.

Pesquisando eu encontrei algumas libs de terceiros como o yahoo-finance para ruby e a ystockquote para python. Essas duas libs acessam dados da Yahoo! que muitas vezes alguns poucos dias defasados e depois de algumas consultas parecia que o acesso estava ficando cada vez mais demorado. Não sei se tem um limite para fazer consultas através do webservice da Yahoo! ou algo assim… No gráfico acima por exemplo a última cotação era do dia 23/jan/2014 e hoje são 29 de janeiro de 2014.

Pesquisando mais um pouquinho, agora no google docs, encontrei um script para a planilha de dados chamada “Cotações BMF Bovespa”, que acessa a própria bovespa para obter os dados. Experimentei por algum tempo e me pareceu ser a que estava mais próxima da minha necessidade de obter os dados mais atuais. Claro que fui ver o código do script e aprendi como obter esses dados. Abaixo listo o código python mostrando como é simples obter a última cotação da Petrobras (PETR4) com a respectiva data de atualização da cotação. Basta consultar uma url e fazer o parsing do XML obtido:

import urllib2 as url
import xml.etree.ElementTree as ET

content = url.urlopen("http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoAjax.asp?CodigoPapel=PETR4").read()
root = ET.fromstring(content)
child = root[0]
print child.get('Nome'), child.get("Ultimo"), child.get('Data')

Não vi se tem como pegar o histórico das cotações, mas em todo caso podemos combinar esse serviço da bovespa com os serviços do Yahoo! que fornecem cotações históricas sem muita dificuldade com as libs mencionadas nas linhas acima.

Advertisements