Volver al curso

Data Science con Python: Análisis de Datos para Tu Carrera

leccion
20 / 23
intermediate
8 horas
Proyecto Final: Analisis de Datos Real

Obtener Datos: APIs y Web Scraping

Lectura
55 min~4 min lectura

Obtener Datos: APIs y Web Scraping

Datos del Mundo Real

Hasta ahora usamos datos generados o datasets incluidos en librerias. En el mundo real, necesitas obtener datos de fuentes externas: APIs publicas, web scraping, bases de datos, archivos compartidos. Esta leccion te ensenia a obtener datos reales para tus proyectos.


APIs: La Forma Profesional

Una API (Application Programming Interface) te da acceso estructurado a datos de un servicio.

import requests
import pandas as pd

# Ejemplo 1: API del Banco Mundial (datos economicos)
url = 'https://api.worldbank.org/v2/country/ARG;BRA;MEX;COL;CHL/indicator/NY.GDP.MKTP.CD'
params = {
    'format': 'json',
    'per_page': 250,
    'date': '2015:2024'
}

respuesta = requests.get(url, params=params)
print(f"Status: {respuesta.status_code}")

if respuesta.status_code == 200:
    datos = respuesta.json()
    registros = datos[1]  # El segundo elemento tiene los datos
    
    df_pib = pd.DataFrame([{
        'pais': r['country']['value'],
        'anio': int(r['date']),
        'pib_usd': r['value']
    } for r in registros if r['value'] is not None])
    
    print(f"\nRegistros obtenidos: {len(df_pib)}")
    print(df_pib.head(10))
    
    # Pivot para comparar paises
    pivot = df_pib.pivot(index='anio', columns='pais', values='pib_usd')
    print("\nPIB por pais (ultimos 5 anios):")
    print((pivot / 1e9).tail().round(1))  # En miles de millones

API de tipo de cambio

# API gratuita de tipos de cambio
url = 'https://api.exchangerate-api.com/v4/latest/USD'
respuesta = requests.get(url)

if respuesta.status_code == 200:
    datos = respuesta.json()
    monedas_latam = ['ARS', 'BRL', 'MXN', 'COP', 'CLP', 'PEN', 'UYU']
    
    df_cambio = pd.DataFrame([
        {'moneda': m, 'tipo_cambio': datos['rates'].get(m, None)}
        for m in monedas_latam
    ])
    print("Tipos de cambio vs USD:")
    print(df_cambio)

API con autenticacion

# Muchas APIs requieren una API key
# Ejemplo con estructura tipica (no ejecutar sin key real)
"""
import os

api_key = os.environ.get('MI_API_KEY', 'tu-api-key-aqui')

headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json'
}

respuesta = requests.get('https://api.ejemplo.com/datos', headers=headers)
"""

Web Scraping con Beautiful Soup

Cuando no hay API disponible, podes extraer datos de paginas web.

from bs4 import BeautifulSoup
import requests
import pandas as pd

# Ejemplo: Scraping de una tabla HTML
# (Wikipedia tiene muchas tablas utiles para practicar)
url = 'https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)'

# Pandas puede leer tablas HTML directamente
tablas = pd.read_html(url)
print(f"Tablas encontradas: {len(tablas)}")

# La primera tabla suele ser la principal
df_gdp = tablas[0]
print(f"Columnas: {df_gdp.columns.tolist()[:5]}")
print(df_gdp.head())

Scraping manual con BeautifulSoup

# Para cuando pd.read_html no funciona
url = 'https://example.com/datos'
respuesta = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(respuesta.text, 'html.parser')

# Encontrar elementos
# titulos = soup.find_all('h2')
# tabla = soup.find('table', class_='datos')
# filas = tabla.find_all('tr')
# etc.

Etica del web scraping

  1. Revisa robots.txt del sitio (ejemplo: site.com/robots.txt)
  2. No sobrecargues el servidor (agrega delays entre requests)
  3. Revisa los terminos de servicio del sitio
  4. Prefiere APIs cuando esten disponibles
  5. Cachea los resultados para no hacer requests repetidos
import time

# Buena practica: esperar entre requests
# for url in lista_urls:
#     respuesta = requests.get(url)
#     time.sleep(1)  # Esperar 1 segundo

Datasets Publicos para Proyectos

Estas son fuentes excelentes de datos reales para tu portfolio:

Fuente URL Tipo de Datos
Kaggle kaggle.com/datasets Todo tipo, competencias
Google Dataset Search datasetsearch.research.google.com Buscador de datasets
Datos Argentina datos.gob.ar Datos publicos argentinos
Banco Mundial data.worldbank.org Economicos, sociales
UCI ML Repository archive.ics.uci.edu Datasets para ML
Our World in Data github.com/owid Datos globales actualizados
Seaborn/Sklearn Integrados en Python Datasets de practica
# Descargar dataset de Kaggle (requiere kaggle CLI)
# pip install kaggle
# kaggle datasets download -d dataset-name

# Descargar de Our World in Data (directo)
url = 'https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/owid-covid-data.csv'
df_covid = pd.read_csv(url)
print(f"Dataset COVID: {df_covid.shape}")
print(df_covid.columns.tolist()[:10])

Video Recomendado

Web Scraping con Python - Tutorial Practico


Ejercicio Practico

Crea un notebook 20_obtener_datos.ipynb:

  1. Consume la API del Banco Mundial para obtener datos de PIB de 5 paises latinoamericanos
  2. Obtiene tipos de cambio actuales de la API de exchangerate
  3. Usa pd.read_html para extraer una tabla de Wikipedia
  4. Combina datos de al menos 2 fuentes diferentes en un solo DataFrame
  5. Guarda el dataset resultante como CSV para usar en las proximas lecciones

💡 Concepto Clave

Revisemos los puntos más importantes de esta lección antes de continuar.

Resumen

  • requests: Libreria para consumir APIs HTTP
  • pd.read_html(): Extraer tablas HTML de paginas web
  • BeautifulSoup: Scraping manual de paginas complejas
  • APIs publicas: La forma mas confiable de obtener datos
  • Etica: Respetar robots.txt, agregar delays, preferir APIs
  • Siempre guarda los datos crudos antes de procesarlos
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
  • Comprendo el concepto principal y puedo explicarlo con mis palabras
  • Entiendo cómo aplicarlo en mi situación específica
  • Necesito repasar algunas partes antes de continuar
  • Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.