Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 3.208 ]
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)
Organizando suas músicas com Python
Mini-dicionário de termos em Python e PyQT 4
Manipulando arquivos com Pickle
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









