Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 2.971 ]
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)
Serialização em Python usando pickle
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado