CodeForge

Python de Cero a Experto / Ruta scripting

requests: hablar con la web

Teoría22 min20 XP

Tus scripts ya no viven aislados: con la librería requests pueden hablar con INTERNET —consultar una API, descargar datos, enviar información a un servidor—. Es la librería más popular de Python para peticiones HTTP, y la puerta a automatizar todo lo que involucre la web: consultar el clima, descargar archivos, integrar servicios. Es el mismo HTTP que dominaste con fetch en JavaScript (SC-02), ahora en Python. Hoy aprendes a comunicar tus scripts con la web.

El mensajero de internet

GET: pedir datos

Como las peticiones a internet necesitan una conexión de red que este entorno del navegador no permite desde Python, esta lección muestra el código con bloques —pruébalo en tu Python instalado tras pip install requests—:

consultar_api.py
import requests

# GET: pedir datos de una API
respuesta = requests.get("https://jsonplaceholder.typicode.com/users/1")

# el código de estado dice si salió bien
print(respuesta.status_code)        # 200 (OK)

# .json() convierte la respuesta JSON en un diccionario de Python
usuario = respuesta.json()
print(usuario["name"])              # Leanne Graham
print(usuario["email"])

# revisar que salió bien antes de usar los datos
if respuesta.status_code == 200:
  print("Datos recibidos correctamente")
else:
  print(f"Error: {respuesta.status_code}")

# con parámetros de consulta (query string)
respuesta = requests.get(
  "https://api.ejemplo.com/gastos",
  params={"categoria": "comida", "mes": "julio"},
)
# construye la URL: .../gastos?categoria=comida&mes=julio

requests.get(url) hace una petición GET y devuelve una respuesta. Lo esencial: .status_code (200 = OK, 404 = no encontrado, 500 = error del servidor), y .json() que convierte la respuesta JSON directamente en un diccionario/lista de Python (más simple que en JavaScript, donde eran dos pasos). Los params agregan una query string a la URL. Como en el SC-02, SIEMPRE revisa el status_code antes de confiar en los datos —una petición puede fallar—.

POST y headers

En requests, ¿qué hace .json() y por qué revisar .status_code o usar raise_for_status()?

Mini-reto

Diseña (en tu Python instalado, o en papel) un script que consuma una API: 1) haz un requests.get a https://jsonplaceholder.typicode.com/users y revisa el status_code; 2) con .json(), recorre los usuarios e imprime el nombre y email de cada uno; 3) envuelve todo en try/except requests.RequestException con un timeout. Bonus: usa params para filtrar y raise_for_status() para el manejo de errores.

Qué sigue

Ya consultas APIs. Pero muchas páginas web no tienen API: los datos están en el HTML. La próxima lección trae el WEB SCRAPING —extraer datos de páginas web con BeautifulSoup— para cuando necesitas información que solo existe en una página. La técnica (y sus consideraciones éticas) para cosechar datos de la web.