Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 3.258 ]
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)
Exemplo de armazenamento de registros em arquivo
Descobrir HOME do usuario e criar arquivo de configuração
Manipulando arquivos com Pickle
Manipulação de arquivos CSV - OO
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Vou destruir sua infância:) (8)
Interface gráfica com problema (2)
Instalar Linux em notebook Sony Vaio VPCEG13EB (13)









