EXPLORANDO EXTRAÇÃO DE DADOS COM PYTHON: HTTP, WEB SCRAPING, BANCO DE DADOS E ARQUIVOS
- #Python
INTRODUÇÃO:
A extração de dados é uma habilidade essencial no mundo da ciência de dados e da análise de informações. Python, com sua vasta gama de bibliotecas e ferramentas, se destaca como uma das linguagens mais poderosas para essa tarefa. Com a crescente quantidade de dados disponíveis na era digital, a capacidade de extrair informações relevantes de diversas fontes se tornou uma competência indispensável para profissionais de tecnologia.
Por isso, neste artigo serão abordados diferentes métodos de extração de dados utilizando Python, incluindo HTTP, web scraping, bancos de dados e arquivos. Esses exemplos ajudarão a ilustrar como cada técnica pode ser aplicada em situações reais, facilitando a compreensão e a implementação das melhores práticas na extração de dados.
1.EXTRAÇÃO DE DADOS VIA HTTP
O protocolo HTTP (HyperText Transfer Protocol) é utilizado para a comunicação na web, permitindo o envio e recebimento de dados entre clientes e servidores, permitindo o carregamento de páginas, o acesso a recursos online e a integração com diversas aplicações e serviços.
Para a comunicação via HTTP, o Python oferece bibliotecas como requests, que simplificam a realização de requisições, permitindo que desenvolvedores acessem APIs e obtenham dados de forma eficiente e intuitiva. Com requests, é possível:
- Enviar requisições GET: Recuperar dados de um servidor.
- Enviar requisições POST: Enviar dados para um servidor.
- Enviar requisições PUT: Atualizar dados em um servidor.
- Enviar requisições DELETE: Remover dados de um servidor.
- Enviar requisições HEAD: Obter apenas os cabeçalhos de resposta.
- Enviar requisições OPTIONS: Descobrir as opções de comunicação disponíveis para um recurso específico.
Fonte: Ronquillo,2024
1.1. Importância da Documentação da API
Ler a documentação da API é essencial para a extração correta de dados. Ela detalha endpoints, tipos de requisições, parâmetros e formatos de resposta. Além disso, descreve métodos de autenticação e autorização, ajudando a evitar erros e problemas de segurança.
Sem uma compreensão clara dessas especificações, os desenvolvedores podem enfrentar dificuldades na integração e uso da API, resultando em falhas na extração de dados e problemas de compatibilidade. Portanto, é necessário estudar as APIs com as quais se deseja comunicar e entender como extrair os dados corretamente.
Fonte:IOPAY,2024
1.2 Exemplos Práticos
Exemplo Prático: Dados climáticos de uma cidade
A seguir, apresentamos um exemplo de como utilizar a biblioteca requests para acessar a API OpenWeatherMap e obter informações climáticas de uma cidade específica. Este projeto verifica as condições climáticas de Cachoeira do Sul:
import requests
#Projeto para verificar as condições climáticas de uma cidade atráves da API Openweathermap
# Chave da API Openweathermap
api_key = "120889cb6ef83c948ee434c61c79641a"
city = "Cachoeira do Sul"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
response = requests.get(url)
# Verificar o status da resposta e o conteúdo
if response.status_code == 200:
data = response.json()
print(f"Temperatura em {city}: {data['main']['temp']}°C")
print(f"Condições climáticas: {data['weather'][0]['description']}")
print(f"Velocidade do vento: {data['wind']['speed']} m/s")
print(f"Umidade: {data['main']['humidity']}%")
print(f"Temperatura em {city}: {data['main']['temp']}°C")
print(f"Condições climáticas: {data['weather'][0]['description']}")
else:
print(f"Erro ao acessar a API: {response.status_code}")
print(f"Resposta da API: {response.text}")
Exemplo Prático: Buscando Produtos no Mercado Livre
Neste exemplo, será utilizada outra biblioteca HTTP chamada http.client. Esta biblioteca é uma ferramenta padrão do Python que permite realizar requisições HTTP e HTTPS, recebendo respostas de servidores web. O código buscará produtos da API do Mercado Livre, selecionando produtos com base em um termo de pesquisa fornecido.
import http.client
import json
# Função para buscar produtos no Mercado Livre
def buscar_produtos(termo, limite, ordenar="price_asc"):
conn = http.client.HTTPSConnection("api.mercadolibre.com")
url = f"/sites/MLB/search?q={termo}&limit={limite}&sort={ordenar}"
conn.request("GET", url)
response = conn.getresponse()
if response.status == 200:
data = response.read()
return json.loads(data)["results"]
else:
return None
# Buscar 10 notebooks ordenados por preço crescente
notebooks = buscar_produtos("notebook", 10, "price_asc")
# Buscar 5 kits gamer (sem ordenar)
kits_gamer = buscar_produtos("kit gamer", 5)
# Função para exibir produtos formatados
def exibir_produtos(titulo, lista_produtos):
print(f"\n{'=' * 40}\n📌 {titulo}\n{'=' * 40}")
for idx, produto in enumerate(lista_produtos, start=1):
print(f"{idx}. Nome: {produto['title']}")
print(f" Preço: R$ {produto['price']:.2f}")
print(f" Link: {produto['permalink']}\n")
# Exibir os resultados formatados
if notebooks:
exibir_produtos("Lista de Notebooks", notebooks)
else:
print("❌ Não foi possível obter a lista de notebooks.")
if kits_gamer:
exibir_produtos("Lista de Kits Gamer", kits_gamer)
else:
print("❌ Não foi possível obter a lista de kits gamer.")
2.EXTRAÇÃO DE DADOS VIA WEB SCRAPING.
Web scraping é uma técnica para extrair dados de sites. Consiste em enviar requisições HTTP para páginas web, analisar o conteúdo HTML retornado e extrair as informações desejadas. Python facilita esse processo com bibliotecas poderosas como BeautifulSoup e Scrapy, permitindo a extração de dados.
O BeautifulSoup é ideal para analisar e navegar em documentos HTML/XML de forma simples e intuitiva. Já o Scrapy é um framework mais robusto, adequado para coletar grandes volumes de dados e realizar crawlers automatizados, Bansal, 2025.
2.1 Exemplos Práticos
Neste exemplo, vamos demonstrar como utilizar a técnica de web scraping para extrair dados de livros do site "Performance Líder" e, em seguida, ordenar esses dados por preço em ordem crescente. O processo será dividido em duas partes: a primeira parte consiste em um crawler que coleta os dados dos livros, e a segunda parte consiste em um script que ordena os dados coletados.
Parte 1: Crawler para Coleta de Dados
O primeiro arquivo, crawler.py, utiliza a biblioteca requests para enviar requisições HTTP e a biblioteca BeautifulSoup para analisar o conteúdo HTML das páginas. O objetivo é extrair os nomes e preços dos livros disponíveis nas páginas especificadas.
import requests
from bs4 import BeautifulSoup
urls = [
"https://www.ontopsicologia.com.br/livros?pagina=1",
"https://www.ontopsicologia.com.br/livros?pagina=2",
"https://www.ontopsicologia.com.br/livros?pagina=3"
]
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
produtos = []
def extract_product_info(url):
response = requests.get(url, headers=headers)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
product_elements = soup.find_all('a', class_='nome-produto cor-secundaria')
product_names = [item.get_text(strip=True) for item in product_elements]
price_elements = soup.find_all('strong', class_='preco-promocional cor-principal')
product_prices = [price.get_text(strip=True).replace('\xa0', ' ').strip() for price in price_elements]
min_length = min(len(product_names), len(product_prices))
for i in range(min_length):
name, price = product_names[i], product_prices[i]
if name and price and not name.startswith('--PRODUTO_NOME--') and not price.startswith('R$ --PRODUTO_PRECO_POR--'):
produtos.append({'nome': name, 'preco': price})
for url in urls:
extract_product_info(url)
#for produto in produtos:
#print(produto)
#with open('livros_ontopsicologia.csv', 'w') as file:
#file.write('Nome do Produto,Preço\n')
#for produto in produtos:
#file.write(f"{produto['nome']},{produto['preco']}\n")
Parte 2: Ordenação dos Produtos Coletados
Após a coleta dos dados dos livros disponíveis nas páginas especificadas, foi organizado estas informações, utilizando-se do algoritmo de ordenação por inserção (insertion sort) para ordenar os produtos com base em seus preços.
from Crawler import produtos
def insertion_sort_produtos(produtos):
for i in range(1, len(produtos)):
atual = produtos[i]
j = i - 1
while j >= 0 and float(produtos[j]['preco'].replace('R$', '').replace(',', '.')) > float(atual['preco'].replace('R$', '').replace(',', '.')):
produtos[j + 1] = produtos[j]
j -= 1
produtos[j + 1] = atual
return produtos
produtos_ordenados = insertion_sort_produtos(produtos)
for produto in produtos_ordenados:
print(f"{produto['nome']} - {produto['preco']}")
3.EXTRAÇÃO DE DADOS VIA BANCO DE DADOS.
A extração de dados de bancos de dados é uma técnica fundamental para acessar e manipular grandes volumes de informações de maneira estruturada e eficiente. Em Python, essa tarefa é facilitada por diversas bibliotecas que permitem a interação com diferentes tipos de bancos de dados, como MySQL, PostgreSQL, SQLite, entre outros.
No exemplo que será abordado, utilizaremos o SQLite3, um banco de dados relacional leve e integrado ao Python, ideal para aplicações de pequeno a médio porte. SQLite3 é uma biblioteca que fornece uma interface para interagir com bancos de dados SQLite. Ele permite criar, ler, atualizar e deletar registros em tabelas de banco de dados, facilitando a gestão e a extração de dados. A seguir, apresentamos um exemplo prático de como utilizar o SQLite3 para extrair dados de um banco de dados.
3.1 Exemplo prático:
Parte 1: Criação ou conexão do Banco de Dados
Nesta primeira parte, será criado um banco de dados SQLite3 e inserido alguns registros na tabela produtos.
import sqlite3
# Conectar ao banco de dados (Ou cria, se não existir)
conn = sqlite3.connect("DioDB.db")
cursor = conn.cursor()
# Criar uma tabela
cursor.execute("""
CREATE TABLE IF NOT EXISTS produtos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
preco REAL NOT NULL
)
""")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Notebook Dell', 3500.00)")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Copo Stanley', 100.00)")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Monitor', 400.00)")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Cadeira Gamer', 800.00)")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Mouse', 50.00)")
cursor.execute("INSERT INTO produtos (nome, preco) VALUES ('Teclado', 100.00)")
# Salvar e fechar
conn.commit()
conn.close()
Parte 2: Coleta dos Dados do Banco de Dados
Nesta segunda parte, será feito a conexão ao banco de dados criado, buscando por todos os registros da tabela produtos e exibindo os dados.
import sqlite3
# Conectar ao banco
conn = sqlite3.connect("DioDB.db")
cursor = conn.cursor()
# Buscar todos os produtos
cursor.execute("SELECT * FROM produtos")
dados = cursor.fetchall() # Retorna todos os registros
# Exibir os dados
print("📌 Produtos cadastrados:")
for produto in dados:
print(f"ID: {produto[0]}, Nome: {produto[1]}, Preço: R$ {produto[2]:.2f}")
# Fechar conexão
conn.close()
4.EXTRAÇÃO DE DADOS POR ARQUIVO.
A extração de dados por arquivo é uma técnica amplamente utilizada para acessar e manipular informações armazenadas em diversos formatos de arquivo. Essa abordagem é especialmente útil quando os dados são fornecidos em arquivos locais ou exportados de sistemas e aplicações. Em Python, existem várias bibliotecas que facilitam a leitura e escrita de diferentes tipos de arquivos, como JSON, Xls, TXT, CSV, entre outros.
4.1 Como funciona ?
A extração de dados por arquivo envolve a leitura do conteúdo do arquivo, a análise dos dados e a manipulação das informações conforme necessário. Dependendo do formato do arquivo, diferentes bibliotecas são utilizadas para realizar essa tarefa.
- XLS (Excel): Para arquivos do Excel, são utilizadas as bibliotecas pandas e openpyxl.
- TXT (Texto Plano): Para arquivos em TXT, é utilizada a biblioteca built-in open().
- CSV (Comma-Separated Values): Para arquivos em CSV, são utilizadas as bibliotecas csv e pandas.
- JSON (JavaScript Object Notation): Para arquivos JSON, é utilizada a biblioteca json.
4.2 Exemplo Prático:
Neste exemplo, será demonstrado como carregar e exibir dados de um arquivo JSON que contém informações sobre diversos jogos do Xbox. O código a seguir realiza essa tarefa de modo simples:
import json
# Caminho para o arquivo JSON
file_path = r'C:\JSON\XBOXGames.json'
# Carregar os dados do arquivo JSON
with open(file_path, 'r') as file:
data = json.load(file)
# Exibir os dados carregados de forma mais legível e ordenada
for item in data:
for key, value in item.items():
print(f"{key}: {value}")
print("\n" + "-"*40 + "\n") # Separador entre itens
CONCLUSÃO:
Conclui-se que a extração de dados é essencial na ciência de dados. Python se destaca por suas bibliotecas para acessar APIs, realizar web scraping e manipular bancos de dados e arquivos. Cada método tem aplicações específicas, permitindo obter e estruturar informações de diversas fontes de forma eficiente.
Dominar essas técnicas é crucial para profissionais de tecnologia, facilitando a coleta e análise de dados. Aplicar boas práticas na extração garante qualidade e eficiência, impactando diretamente o sucesso de projetos voltado a dados e análise de informações.
Referências:
- Bansal, Nanam. Web Scraping com Python: Um Guia Completo Passo a Passo + Código; Link: https://gologin.com/pt/blog/web-scraping-with-python/ Acesso em: 13/02/2025
- IOPAY Documentação de API: Por que é importante e como fazê-la corretamente? ; Link: https://blog.iopay.com.br/pagamentos-online/documentacao-de-api-por-que-e-importante-e-como-faze-la-corretamente Acesso em: 12/02/2025
- Mollenhauer, Nikkel:. Github Game pass API; Link https://github.com/NikkelM/Game-Pass-API Acesso em: 12/02/2025
- Ronquillo, Alex. Biblioteca de solicitações do Python (guia) ; Link:https://realpy thon.com/python-requests/z Acesso em: 12/02/2025