Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 3.027 ]
Homepage:
Este script coleta dados e gerar arquivos no formato XML. Os dados são sobre os pilotos, equipes, pontuação e país de origem.
Coleta dados das temporadas de 2010 à 2020.
Os arquivos são gerados na pasta onde está salvo este script.
#Autor:Redbulldog #Data:25/07/2020 #Descrição: web scraping paa coletar dados dos pilotos da formula 1 from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError from bs4 import BeautifulSoup dados_cabechalo = [] anos_corridas = ['2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020'] #user agente passa as informações sobre plataforma usada e sistema operacional header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'} #metodo para coletar toda pagina html def coleta_html_pagina(url): resposta = urlopen(Request(url, headers=header)) return BeautifulSoup(resposta, 'html.parser') #método para coleta nomenclaturas das colunas def cabeca_tabela(html): return html.findAll('th') def validaNull(dado): if dado is not None: return dado.getText() else: return 'NA' #motando arquivo json def gerarArquivo(pilotos, ano): pilotos = pilotos.findAll('tr') for piloto in pilotos: f = open('{}{}{}.xml'.format(validaNull(piloto.find('span',{'class':'hide-for-tablet'})),validaNull(piloto.find('span',{'class':'hide-for-mobile'})),ano),'w') #print(validaNull(piloto.find('td',{'class':'dark'})).getText()) f.write('<piloto>\n') f.write('<{}>{}</{}>\n'.format(dados_cabechalo[1],validaNull(piloto.find('td',{'class':'dark'})),dados_cabechalo[1])) f.write('<{}>{} {}</{}>\n'.format(dados_cabechalo[2],validaNull(piloto.find('span',{'class':'hide-for-tablet'})),validaNull(piloto.find('span',{'class':'hide-for-mobile'})),dados_cabechalo[2])) f.write('<{}>{}</{}>\n'.format(dados_cabechalo[3],validaNull(piloto.find('td',{'class':'dark semi-bold uppercase'})),dados_cabechalo[3])) f.write('<{}>{}</{}>\n'.format(dados_cabechalo[5],validaNull(piloto.find('td',{'class':'dark bold'})),dados_cabechalo[5])) f.write('<ano>{}</ano>\n'.format(ano)) f.write('</piloto>\n') f.close() def acessoPagina(ano): try: #pegandos html dados = coleta_html_pagina('https://www.formula1.com/en/results.html/{}/drivers.html'.format(ano)) #tratando dados for dado in cabeca_tabela(dados): dados_cabechalo.append(dado.getText()) #print(dados_cabechalo) gerarArquivo(dados,ano) except URLError as e: print(e.status, e.reason) except HTTPError as e: print(e.status, e.reason) #https://www.formula1.com/en/results.html/2020/drivers.html if __name__ == '__main__': for ano in anos_corridas: acessoPagina(ano) print(dados_cabechalo)
Dividir um grupo de arquivos em vários CDs Ou DVDs
Criando um rootfs para sistemas embarcados a partir de cópia de um sistema já operando
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Resolvendo o erro "libQt6Widgets.so.6: cannot open shared object file" no Linux
Como instalar protetores de tela (Debian e derivados)
Conheça a 4Devs, caixa de ferramentas online para desenvolvedores
Como converter um vídeo MP4 para um GIF para publicar no README.md do seu repositório Github
Problemas de compartilhame... de impressora no Ubuntu 24.04 (3)
Ferramentas e métodos de criação de binários estáticos (1)
Como faço o root no android 11 rock pi 4 plus (1)
como instalo panfrost-dri e o driver panfrost fork , ou panfrost (11)