Skip to content

Como Fazer Web Scraping com Python (e Beautiful Soup)

    webscraping

    Aprenda a obter informações da web e criar gráficos com Python neste guia para analistas de dados e cientistas.

    O que é Web Scraping?

    Web scraping é pegar informações de sites. Se você achar algo útil, mas não puder baixar, usar Python para web scraping pode ajudar a pegar esses dados.

    Web Scraping com Beautiful Soup

    Para web scraping, comece importando bibliotecas como Pandas, Numpy, Matplotlib e Beautiful Soup. Se não tem o Jupyter Notebook, use o Anaconda Python, que já tem essas bibliotecas.

    Para ver gráficos, adicione a linha ‘%matplotlib inline’ no código.

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    %matplotlib inline

    Podemos especificar a URL que contém os dados e usar a função urlopen para obter o HTML da página.

    url = "http://www.hubertiming.com/results/2017GPTR10K"
    html = urlopen(url)

    Com o HTML da página em mãos, você pode criar um objeto Beautiful Soup para analisar o HTML e extrair informações relevantes.

    soup = BeautifulSoup(html, 'lxml')

    Agora é possível começar a extrair informações interessantes da página da web. Por exemplo, você pode obter o título da página da seguinte forma:

    title = soup.title
    print(title)

    Você pode visualizar o texto da página da web para verificar se é o que você espera:

    text = soup.get_text()
    print(text)

    Extração de Dados

    Para extrair dados de tabelas em uma página da web, você pode usar o método find_all do Beautiful Soup. Por exemplo, para extrair todos os hiperlinks da página, você pode fazer o seguinte:

    all_links = soup.find_all("a")
    for link in all_links:
        print(link.get("href"))

    Você também pode extrair as linhas de uma tabela da seguinte forma:

    rows = soup.find_all('tr')
    print(rows[:10])  # Exibir as primeiras 10 linhas como exemplo

    Limpeza e Manipulação de Dados

    Após extrair os dados da página da web, é hora de limpar e manipular esses dados. Por exemplo, podemos remover as tags HTML dos dados usando o Beautiful Soup:

    str_cells = str(row_td)
    cleantext = BeautifulSoup(str_cells, "lxml").get_text()
    print(cleantext)

    Você também pode dividir os dados em colunas para criar um DataFrame do Pandas:

    df = pd.DataFrame(list_rows)

    Em seguida, podemos dividir a primeira coluna em várias colunas com base nas vírgulas:

    df1 = df[0].str.split(',', expand=True)

    Agora temos um DataFrame que pode ser usado para análise e visualização de dados.

    Análise e Visualização de Dados

    Com os dados limpos e em um DataFrame, você pode realizar análises e criar visualizações. Por exemplo, você pode calcular a média do tempo de conclusão dos corredores:

    time_list = df7[' Chip Time'].tolist()
    time_mins = []
    for i in time_list:
        h, m, s = i.split(':')
        math = (int(h) * 3600 + int(m) * 60 + int(s))/60
        time_mins.append(math)
    df7['Runner_mins'] = time_mins

    Neste momento você pode usar o Pandas para calcular estatísticas resumidas:

    df7.describe(include=[np.number])

    Você também pode criar gráficos, como um boxplot para visualizar a distribuição dos tempos dos corredores:

    df7.boxplot(column='Runner_mins')
    plt.grid(True, axis='y')
    plt.ylabel('Chip Time')
    plt.xticks([1], ['Runners'])

    Além disso, você pode criar gráficos de distribuição para ver como os tempos de conclusão dos corredores estão distribuídos:

    x = df7['Runner_mins']
    ax = sns.distplot(x, hist=True, kde=True, rug=False, color='m', bins=25, hist_kws={'edgecolor':'black'})
    plt.show()

    Finalmente podemos comparar o desempenho entre homens e mulheres de diferentes faixas etárias usando visualizações de dados:

    f_fuko = df7.loc[df7[' Gender']==' F']['Runner_mins']
    m_fuko = df7.loc[df7[' Gender']==' M']['Runner_mins']
    sns.distplot(f_fuko, hist=True, kde=True, rug=False, hist_kws={'edgecolor':'black'}, label='Female')
    sns.distplot(m_fuko, hist=False, kde=True, rug=False, hist_kws={'edgecolor':'black'}, label='Male')
    plt.legend()

    Conclusão

    Neste artigo, você aprendeu como realizar web scraping usando Python e Beautiful Soup, bem como como limpar, manipular e visualizar os dados obtidos. Essas habilidades são fundamentais para qualquer analista de dados ou cientista de dados que deseja extrair informações valiosas da web.

    Com o conhecimento adquirido, você pode facilmente coletar dados da web, aplicar técnicas de limpeza e extrair insights úteis para suas análises.

    Outras Referências

    Como Extrair Resultados de Pesquisa do Google (SERPs) – 2023

    Link para a biblioteca BeautifulSoup: https://pypi.org/project/beautifulsoup4/

    Leave a Reply

    Your email address will not be published. Required fields are marked *