Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 3.159 ]
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)
Converte valor de Bytes 2 Kbyte 2 Mbyte
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Perfil criado no samba ad dc não loga no Windows 10 e 11 (7)
Erro ao tentar ativar o secure boot no arch (4)
Estou tentando ser legalista, mas tá complicado! (3)









