Last active
February 1, 2017 15:29
-
-
Save maurobaraldi/6912319f4ba641ca2d8376376e8a6a99 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from io import BytesIO | |
from os.path import abspath, dirname, join | |
from zipfile import ZipFile | |
from lxml.html import parse | |
from requests import get | |
baseurl = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/{product}' | |
basedir = abspath(dirname(__file__)) | |
prods = { | |
'quina': { | |
'url': baseurl.format(product='D_quina.zip'), | |
'filename': join(basedir, 'D_QUINA.HTM'), | |
'headers': 'Concurso Data_Sorteio 1ª_Dezena 2ª_Dezena 3ª_Dezena 4ª_Dezena 5ª_Dezena Arrecadacao_Total Ganhadores_Quina Cidade UF Rateio_Quina Ganhadores_Quadra Rateio_Quadra Ganhadores_Terno Rateio_Terno Ganhadores_Duque Rateio_Duque Acumulado Valor_Acumulado Estimativa_Premio Valor_Acumulado_Sorteio_Especial_São_João'.split(), | |
'columns': range(22), | |
}, | |
'lotofacil': { | |
'url': baseurl.format(product='D_lotfac.zip'), | |
'filename': join(basedir, 'D_LOTFAC.HTM'), | |
'headers': 'Concurso Data Sorteio ola1 Bola2 Bola3 Bola Bola5 Bola6 Bola7 Boa8 Bola9 Bola10 Bola1 Bola12 Bola13 Bola14 Bla15 Arrecadacao_Total anhadores_15_Números Ciade UF anhadores_14_Números Gahadores_13_Números Gnhadores_12_Númers Ganhadores_11_Números Valor_Rateio_15_Números Valor_Rateio_14_Números Valor_Rateio_13_Números Valor_Rateio_12_Números Valor_Rateio_11_Números Acumulado_15_Números Estimativa_Premio Valor_Acumulado_Especial'.split(), | |
'columns': range(33) | |
}, | |
'megasena': { | |
'url': baseurl.format(product='D_megase.zip'), | |
'filename': join(basedir, 'D_MEGA.HTM'), | |
'headers': 'Concurso Data_Sorteio 1ª_Dezena 2ª_Dezena 3ª_Dezena 4ª_Dezena 5ª_Dezena 6ª_Dezena Arrecadacao_Total Ganhadores_Sena Cidade UF Rateio_Sena Ganhadores_Quina Rateio_Quina Ganhadores_Quadra Rateio_Quadra Acumulado Valor_Acumulado Estimativa_Prêmio Acumulado_Mega_da_Virada'.split(), | |
'columns': range(21), | |
}, | |
'lotomania': { | |
'url': baseurl.format(product='D_lotoma.zip'), | |
'filename': join(basedir, 'D_LOTMAN.HTM'), | |
'headers': 'Concurso Data Sorteio Bola1 Bola2 Bola3 Bola4 Bola5 Bola6 Bola7 Bola8 Bola9 Bola10 Bola11 Bola12 Bola13 Bola14 Bola15 Bola16 Bola17 Bola18 Bola19 Bola20 Arrecadação_Total Ganhadores_20_Números Cidade UF Ganhadores_19_Números Ganhadores_18_Números Ganhadores_17_Números Ganhadores_16_Números Ganhadores_Nenhum_Número Valor_Rateio_20_Números Valor_Rateio_19_Números Valor_Rateio_18_Números Valor_Rateio_17_Números Valor_Rateio_16_Números Valor_Rateio_Nenhum_Número Acumulado_20_Números Acumulado_19_Números Acumulado_18_Números Acumulado_17_Números Acumulado_16_Números Acumulado_Nenhum_Número Estimativa_Prêmio Valor_Acumulado_Especial'.split(), | |
'columns': range(45), | |
}, | |
'timemania': { | |
'url': baseurl.format(product='D_timema.zip'), | |
'filename': join(basedir, 'D_TIMEMA.HTM'), | |
'headers': 'Concurso Data Sorteio Bola1 Bola2 Bola3 Bola4 Bola5 Bola6 Bola7 Time_Coração Valor_Arrecadado Ganhadores_7_Números Cidade UF Ganhadores_6_Números Ganhadores_5_Números Ganhadores_4_Números Ganhadores_3_Números Ganhadores_Time_Coração Valor_Rateio_7_Números Valor_Rateio_6_Números Valor_Rateio_5_Números Valor_Rateio_4_Números Valor_Rateio_3_Números Valor_Time_Coração Valor_Acumulado Estimativa_Premio'.split(), | |
'columns': range(27), | |
}, | |
'duplasena': { | |
'url': baseurl.format(product='d_dplsen.zip'), | |
'filename': join(basedir, 'D_DPLSEN.HTM'), | |
'headers': 'Concurso Data_Sorteio 1º_número_Sorteio1 2º_número_Sorteio1 3º_número_Sorteio1 4º_número_Sorteio1 5º_número_Sorteio1 6º_número_Sorteio1 Arrecadação_Total Ganhadores_Sena_Sorteio1 Cidade UF Rateio_Sena_Sorteio1 Acumulado_Sena_Sorteio1 Valor_Acumulado_Sena_Sorteio1 Ganhadores_Quina_Sorteio1 Rateio_Quina_Sorteio1 Ganhadores_Quadra_Sorteio1 Rateio_Quadra_Sorteio1 Ganhadores_Terno_Sorteio1 Rateio_Terno_Sorteio1 1º_número_Sorteio2 2º_número_Sorteio2 3º_número_Sorteio2 4º_número_Sorteio2 5º_número_Sorteio2 6º_número_Sorteio2 Ganhadores_Sena_Sorteio2 Rateio_Sena_Sorteio2 Ganhadores_Quina_Sorteio2 Rateio_Quina_Sorteio2 Ganhadores_Quadra_Sorteio2 Rateio_Quadra_Sorteio2 Ganhadores_Terno_Sorteio2 Rateio_Terno_Sorteio2 Estimativa_Prêmio Acumulado_Especial_de_Páscoa'.split(), | |
'columns': range(37), | |
}, | |
'loteriafederal': { | |
'url': baseurl.format(product='D_federa.zip'), | |
'filename': join(basedir, 'D_LOTFED.HTM'), | |
'headers': 'Concurso Data_Sorteio 1º_Prêmio 2º_Prêmio 3º_Prêmio 4º_Prêmio 5º_Prêmio Valor_Primeiro_Prêmio Valor_Segundo_Prêmio Valor_Terceiro_Prêmio Valor_Quarto_Prêmio Valor_Quinto_Prêmio'.split(), | |
'columns': range(12), | |
}, | |
'lotogol': { | |
'url': baseurl.format(product='d_lotogo.zip'), | |
'filename': join(basedir, 'D_LOTOGO.HTM'), | |
'headers': 'Concurso Data_Sorteio Cidade UF Ganhadores_5_Acertos Valor_Rateio_5_Acertos Acumulado_5_Acertos Valor_Acumulado_5_Acertos Ganhadores_4_Acertos Valor_Rateio_4_Acertos Acumulado_4_Acertos Valor_Acumulado_4_Acertos Ganhadores_3_Acertos Valor_Rateio_3_Acertos Acumulado_3_Acertos Valor_Acumulado_3_Acertos Jogo_1_Placar_Time_1 Jogo_1_Placar_Time_2 Jogo_2_Placar_Time_1 Jogo_2_Placar_Time_2 Jogo_3_Placar_Time_1 Jogo_3_Placar_Time_2 Jogo_4_Placar_Time_1 Jogo_4_Placar_Time_2 Jogo_5_Placar_Time_1 Jogo_5_Placar_Time_2 Arrecadacao_Total Estimativa_Premio'.split(), | |
'columns': range(28), | |
}, | |
'loteca': { | |
'url': baseurl.format(product='d_loteca.zip'), | |
'filename': join(basedir, 'D_LOTECA.HTM'), | |
'headers': 'Concurso Data_Sorteio Ganhadores_14_Acertos Cidade UF Valor_Rateio_14_Acertos Acumulado Valor_Acumulado_14_Acertos Ganhadores_13_Acertos Valor_Rateio_13_Acertos Ganhadores_12_Acertos Valor_Rateio_12_Acertos Jogo_1 Jogo_2 Jogo_3 Jogo_4 Jogo_5 Jogo_6 Jogo_7 Jogo_8 Jogo_9 Jogo_10 Jogo_11 Jogo_12 Jogo_13 Jogo_14 Arrecadacao_Total Estimativa_Prêmio'.split(), | |
'columns': range(28), | |
}, | |
} | |
def get_results(product): | |
url = prods[product]['url'] | |
download = ZipFile(BytesIO(get(url, stream=True).content)) | |
for _file_ in download.filelist: | |
if _file_.filename.lower().__contains__('htm'): | |
download.extract(_file_.filename, basedir) | |
return join(basedir, _file_.filename) | |
def meta_parser(product): | |
get_results(product) | |
rows = parse(prods[product]['filename']) | |
rows = rows.xpath("body/table")[0].findall("tr") | |
columns = prods[product]['columns'] | |
for j, r in enumerate(rows[1::], 1): | |
data = [i.text for i in r.getchildren()] | |
if len(data) >= 12: | |
try: | |
row = [data[i] for i in columns] | |
yield dict(zip(prods[product]['headers'], row)) | |
except Exception as e: | |
print('Erro: %s' % e) | |
print('Error on registry:{0} \n Resultado:{1}'.format(*[j, data])) | |
# tests | |
# print('Megasena:') | |
# print([i for i in meta_parser('megasena')]) | |
# print('Lotofacil:') | |
# print([i for i in meta_parser('lotofacil')]) | |
# print('Quina:') | |
# print([i for i in meta_parser('quina')]) | |
# print('Lotomania:') | |
# print([i for i in meta_parser('lotomania')]) | |
# print('Timemania:') | |
# print([i for i in meta_parser('timemania')]) | |
# print('duplasena:') | |
# print([i for i in meta_parser('duplasena')]) | |
# print('Loteria Federal:') | |
# print([i for i in meta_parser('loteriafederal')]) | |
# print('Lotogol:') | |
# print([i for i in meta_parser('lotogol')]) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Pygments==2.1.3 | |
decorator==4.0.10 | |
ipdb==0.10.1 | |
ipython==5.1.0 | |
ipython-genutils==0.1.0 | |
lxml==3.7.0 | |
pexpect==4.2.1 | |
pickleshare==0.7.4 | |
prompt-toolkit==1.0.9 | |
ptyprocess==0.5.1 | |
py==1.4.31 | |
pytest==3.0.5 | |
requests==2.12.4 | |
simplegeneric==0.8.1 | |
six==1.10.0 | |
traitlets==4.3.1 | |
wcwidth==0.1.7 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment