Skip to content

Instantly share code, notes, and snippets.

@luisfbueno
Created February 22, 2019 14:47
Show Gist options
  • Save luisfbueno/b446c8d905fe780f4de3cb16dbc2bd74 to your computer and use it in GitHub Desktop.
Save luisfbueno/b446c8d905fe780f4de3cb16dbc2bd74 to your computer and use it in GitHub Desktop.
import pandas as pd
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns
# Método para extrair várias páginas de uma só vez
def scrape_stats(base_url, year_start, year_end):
years = range(year_start,year_end+1,1)
final_df = pd.DataFrame()
for year in years:
print('Extraindo ano {}'.format(year))
req_url = base_url.format(year)
req = requests.get(req_url)
soup = BeautifulSoup(req.content, 'html.parser')
table = soup.find('table', {'id':'totals_stats'})
df = pd.read_html(str(table))[0]
df['Year'] = year
final_df = final_df.append(df)
return final_df
# utilizando o método criado
url = 'https://www.basketball-reference.com/leagues/NBA_{}_totals.html'
df = scrape_stats(url, 2013, 2018)
drop_indexes = df[df['Rk'] == 'Rk'].index # Pega indexes onde a coluna 'Rk' possui valor 'Rk'
df.drop(drop_indexes, inplace=True) # elimina os valores dos index passados da tabela
# Convertendo tabelas para valores numéricos
numeric_cols = df.columns.drop(['Player','Pos','Tm'])
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric)
# Gráfico de média de bolas de 3 pontos arremessadas por ano
sns.barplot(x='Year', y='3PA')
# Ordena Data Frame por bola de 3 pontos convertidas em ordem decrescente
sorted_df = df.sort_values(by=['3P'], axis=0, ascending=False)
# Mostra 5 primeiras posições da tabela
sorted_df[['Player', '3P', 'Year']].head()
# Agrupando os dados por jogador e somando os valores
grouped_df = df.groupby('Player', as_index=False).sum()
# Ordena Data Frame por bolas de 3 pontos convertidas em ordem decrescente
sorted_df = df.sort_values(by=['3P'], axis=0, ascending=False)
# Mostra 5 primeiras posições da tabela
sorted_df[['Player', '3P', '3PA']].head()
import pandas as pd
import requests
from bs4 import BeautifulSoup
# Método para extrair várias páginas de uma só vez
def scrape_stats(base_url, year_start, year_end):
years = range(year_start,year_end+1,1)
final_df = pd.DataFrame()
for year in years:
print('Extraindo ano {}'.format(year))
req_url = base_url.format(year)
req = requests.get(req_url)
soup = BeautifulSoup(req.content, 'html.parser')
table = soup.find('table', {'id':'totals_stats'})
df = pd.read_html(str(table))[0]
df['Year'] = year
final_df = final_df.append(df)
return final_df
import pandas as pd
import requests
from bs4 import BeautifulSoup
# Execução do Request GET para obter o conteúdo da página
req = requests.get('https://www.basketball-reference.com/leagues/NBA_2018_totals.html')
if req.status_code == 200: # Status 200 indica que a requisição foi completada
print('Requisição bem sucedida!')
content = req.content # obtém conteúdo da página
soup = BeautifulSoup(content, 'html.parser')
# Utilizando somente o nome da tag HTML
table = soup.find(name='table')
# Especificando atributos da tag
table = soup.find(name='table', attrs={'id':'totals_stats'})
# Usando find_all
table = soup.find_all(name='table')
# Lendo como Data Frame
table_str = str(table)
df = pd.read_html(table_str))[0]
print(df.head())
# Limpando dados desnecessários
drop_indexes = df[df['Rk'] == 'Rk'].index # Pega indexes onde a coluna 'Rk' possui valor 'Rk'
df.drop(drop_indexes, inplace=True) # elimina os valores dos index passados da tabela
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment