Web Scraping para coletar dados dos pilotos da Fórmula 1
Publicado por Diego Lopes (última atualização em 08/08/2020)
[ Hits: 2.863 ]
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)
Manipulação de arquivos CSV - OO
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta