Explorando a biblioteca BeautifulSoup
Neste mês, dediquei meu tempo para estudar a fundo a biblioteca BeautifulSoup e suas capacidades para fazer web scraping. E antes que você pense que estou falando de scraping em sites de apostas, relaxe!
Aqui está um pequeno tutorial de como extrair dados do Instituto Brasileiro de Geografia e Estatística (IBGE).
Presumo que você já tenha algum conhecimento de Python, mais qualquer coisa segue o link.
Vamos lá!
Abra um terminal ou prompt de comando e execute o seguinte comando para instalar a biblioteca BeautifulSoup:
pip install beautifulsoup4
Após a instalação, importe a biblioteca BeautifulSoup no seu código Python:
from bs4 import BeautifulSoup
Para extrair os dados do IBGE, também utilizaremos as bibliotecas pandas e requests.
Para extrair os dados do IBGE, também utilizaremos as bibliotecas pandas e requests. Importe-as da seguinte forma:
import requests
from bs4 import BeautifulSoup
import pandas as pd
Agora, podemos começar a explorar a biblioteca BeautifulSoup para extrair dados do IBGE.
def scraping_uf(uf: str):
# Construir a URL para a UF específica
uf_url = f'https://www.ibge.gov.br/cidades-e-estados/{uf}.html'
# Definir os cabeçalhos para a requisição
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
# Enviar uma requisição GET para a URL com os cabeçalhos
page = requests.get(uf_url, headers=headers)
# Criar um objeto BeautifulSoup para analisar o conteúdo HTML
soup = BeautifulSoup(page.content, 'html.parser')
# Selecionar todos os elementos com a classe 'indicador'
indicadores = soup.select('.indicador')
# Criar um dicionário para armazenar os dados da UF
uf_dict = {
dado.select('.ind-label')[0].text: dado.select('.ind-value')[0].text
for dado in indicadores
}
# Retornar o dicionário contendo os detalhes da UF
return uf_dict
Essa função é usada para obter dados específicos de uma Unidade Federativa (UF) do Brasil através do código da UF fornecido como entrada. Em seguida, ela constrói a URL correspondente à UF desejada. A função realiza uma requisição HTTP GET para a URL utilizando um cabeçalho específico. O conteúdo da página é analisado usando a biblioteca BeautifulSoup para encontrar elementos com a classe ‘indicador'.
Para cada elemento encontrado, o código extrai o rótulo (classe ‘ind-label') e o valor (classe ‘ind-value') correspondentes, e os armazena em um dicionário. Por fim, a função retorna o dicionário com os detalhes da UF, tais como indicadores demográficos, econômicos ou sociais.
estado = scraping_uf('sp')
print(estado)
{'Governador': 'TARCISIO GOMES DE FREITASxa0xa0xa0[2023]',
'Capital': 'São Pauloxa0xa0xa0[2010]',
'Gentílico': 'paulista',
'Área Territorial': '248.219,485 km²xa0xa0xa0[2022]',
'População estimada': '46.649.132 pessoasxa0xa0xa0[2021]',
'Densidade demográfica': '166,25 hab/km²xa0xa0xa0[2010]',
'Matrículas no ensino fundamental': '5.396.803 matrículasxa0xa0xa0[2021]',
'IDH Índice de desenvolvimento humano': '0,783xa0xa0xa0[2010]',
'Receitas realizadas': '232.822.496,57 R$ (×1000)xa0xa0xa0[2017]',
'Despesas empenhadas': '231.982.243,69 R$ (×1000)xa0xa0xa0[2017]',
'Rendimento mensal domiciliar per capita': '2.148 R$xa0xa0xa0[2022]',
'Total de veículos': '32.293.191 veículosxa0xa0xa0[2022]'}
O exemplo acima apresenta dados de São Paulo, porém os dados não estão bem limpos.
#Função para limpar alguns dados
for indicador in estado:
if ']' in estado[indicador]:
estado[indicador] = estado[indicador].split(']')[0][:-8]
else:
estado[indicador] = estado[indicador]
estado
{'Governador': 'TARCISIO GOMES DE FREITAS',
'Capital': 'São Paulo',
'Gentílico': 'paulista',
'Área Territorial': '248.219,485 km²',
'População estimada': '46.649.132 pessoas',
'Densidade demográfica': '166,25 hab/km²',
'Matrículas no ensino fundamental': '5.396.803 matrículas',
'IDH Índice de desenvolvimento humano': '0,783',
'Receitas realizadas': '232.822.496,57 R$ (×1000)',
'Despesas empenhadas': '231.982.243,69 R$ (×1000)',
'Rendimento mensal domiciliar per capita': '2.148 R$',
'Total de veículos': '32.293.191 veículos'}
Colocando em um Data Frame:
df = pd.DataFrame(estado.values(), index=estado.keys())
df
Governador TARCISIO GOMES DE FREITAS
Capital São Paulo
Gentílico paulista
Área Territorial 248.219,485 km²
População estimada 46.649.132 pessoas
Densidade demográfica 166,25 hab/km²
Matrículas no ensino fundamental 5.396.803 matrículas
IDH Índice de desenvolvimento humano 0,783
Receitas realizadas 232.822.496,57 R$ (×1000)
Despesas empenhadas 231.982.243,69 R$ (×1000)
Rendimento mensal domiciliar per capita 2.148 R$
Total de veículos 32.293.191 veículos
É só uma pequena amostra do quão poderosa é a biblioteca BeautifulSoup. Com ela, é possível extrair informações valiosas de páginas da web de forma eficiente e precisa.
- EDITOR
- KNOWLIB
- SOURCS
- knowlib.app