Web Scraping para coletar dados dos pilotos da Fórmula 1

Publicado por Diego Lopes (última atualização em 08/08/2020)

[ Hits: 2.689 ]

Homepage:

Download scraping_formula1.py




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.

  



Esconder código-fonte

#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)

Scripts recomendados

pySuporte - Script para controle de chamados armazena num txt.

Agenda de cadastros com tratamento de erros

RenameFile

backup all files

ccl - cut and change lines


  

Comentários
[1] Comentário enviado por maurixnovatrento em 13/08/2020 - 19:36h

Muito bom.

___________________________________
Conhecimento não se Leva para o Túmulo.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts