Ciencia de Datos e IA

APIs y web scraping etico

Ingerir datos externos por API REST y scraping HTML con practicas profesionales: autenticacion, paginacion, rate limiting, flatten de JSON y respeto legal.

APIs y web scraping: traer datos de afuera sin morir (ni morir legalmente)

Ningun dataset te llega completo: siempre falta una fuente externa. La via noble es una API: el dueno te sirve JSON ordenado, con paginas y reglas. La via del salvaje es el scraping: arrancar datos de HTML escrito para humanos. Este objeto recorre las dos con codigo resuelto —autenticacion, paginacion, limites de peticiones, analisis de JSON anidado, selectores y almacenamiento— y sobre todo las reglas eticas y legales que separan al profesional del demandado.

Flujo de ingesta: peticion HTTP, servidor, JSON y parsing a tabla.
API bien portada o HTML ajeno: el mismo patron —pedir, leer, convertir, guardar, respetar.
La primera pregunta, siempre ¿Existe API oficial? Si la hay, NO scrapees: es mas estable, documentada y legalmente limpia. El scraping es el plan B para lo que no tiene API, y aun el plan B empieza en robots.txt y los Terminos de Servicio.

Anatomia de una peticion

GET con params y cabeceras, resuelto

  1. Una peticion = URL base + query params + cabeceras. El servidor responde status + cuerpo. Cabecera clave: Authorization para el token; User-Agent para presentarte.

Del JSON anidado a la tabla plana

Problema. La API devuelve cada usuario como {"id": 7, "empresa": {"nombre": "Acme", "ciudad": "MX"}, "posts": [{"titulo": "a"}, {"titulo": "b"}]}. Conviertelo a una fila por usuario con numero de posts.

Aplanar (flatten) resuelto

  1. Identifica la entidad-fila (usuario) y que campos "bajan" de un nivel (empresa.nombre) vs los que EXPLOTRAN una lista (posts → contar).

Scraping HTML con respeto

BeautifulSoup: del selector a la fila

  1. robots.txt dice lo PROHIBIDO (Disallow), no lo permitido: leelo primero, respeta crawl-delay, y si los Terminos de Servicio prohiben scraping, no hay tecnica que valide violarlos.

Ruta de ingesta externa

Autoexamen cronometrado (15 minutos)

Recibes HTTP 429. La lectura correcta es:

Si una pagina no aparece en el Disallow de robots.txt, tengo permiso legal de extraer todo.

Para leer la respuesta JSON de una peticion requests se usa la funcion del objeto respuesta.

Empareja status con su accion.

Descargas 1 paginas por segundo durante 5 minutos con rate limit de 1000 peticiones/hora. ¿Cuantas peticiones consumiste?

Video de repaso

Para profundizar

Real Python: HTTP con requests
Tutoriales practicos y gratuitos de la libreria estandar de facto.

Estandar robots.txt
Como leerlo y que NO significa: la etica del crawler bien documentada.

Disena la ingesta de tu proyecto favorito: fuente, API o scraping, volumen estimado, rate limit, almacenamiento crudo y frecuencia incremental. ¿Donde esta el punto de tu diseno que un abogado leerian primero?