Python de Cero a Experto / Ruta scripting
requests: hablar con la web
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—:
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=juliorequests.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.