Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 2.703 ]
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)
subwrite - um simples editor de texto em Python
Dividir um grupo de arquivos em vários CDs Ou DVDs
Juntando tabelas em aquivo texto
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET
Instalando Navegador Firefox no Debian 12
Bloqueando propagandas no Youtube e outros sites com o uBlocker Origin
Criando um Pen Drive Bootável no Linux
Não existe o slackbuild do bash no repositório slackbuild? (3)
problemas com artefatos na instalação (26)
Como usar o WhatsApp no PC sem precisar escanear o qrcode ou utilizar... (5)