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/