Tutorial de Raspador Web en Python: Requests a Playwright
Senior Web Scraping Engineer
TL;DR:
- Un rastreador web de Python es una cola con reglas. Comienza desde una o más URLs, normaliza los enlaces descubiertos, rechaza duplicados, impone el alcance y registra lo que sucedió con cada página.
- Requests y Beautiful Soup son la base adecuada para páginas renderizadas en el servidor. Mantienen la búsqueda rápida y hacen que los fallos sean fáciles de inspeccionar.
- Playwright pertenece a la rama de JavaScript, no a cada URL. Renderiza solo páginas cuyo contenido requerido está ausente de la respuesta inicial.
- Scrapeless Scraping Browser mueve la ejecución del navegador fuera del proceso del rastreador. Es útil cuando las sesiones gestionadas y el renderizado dinámico se convierten en el costo operativo principal.
Un rastreador decide a dónde ir a continuación a partir de lo que acaba de obtener. Eso hace que la política de URL, el estado de la cola y la deduplicación sean más importantes que cualquier selector CSS único.
Este tutorial construye el diseño en capas: HTTP simple para páginas estables, renderizado en el navegador para contenido del lado del cliente, y luego ejecución gestionada del navegador cuando Chromium local se convierte en la restricción.
Qué es un Rastreador Web de Python?
Un rastreador web de Python es un programa que descubre páginas siguiendo enlaces de un conjunto semilla. El web scraping extrae campos de una página conocida; el crawling descubre qué páginas existen y las programa para procesamiento posterior.
Los dos trabajos a menudo comparten un proceso, pero deben permanecer separados en el diseño. El descubrimiento devuelve URLs canónicas y metadatos de relación. La extracción devuelve registros como título, precio, fecha o texto del cuerpo.
El Pipeline del Rastreador a Vistazo
| Etapa | Entrada | Salida | Regla principal |
|---|---|---|---|
| Semilla | URLs iniciales | Cola inicial | Utilizar dominios permitidos explícitamente |
| Obtener | URL canónica | Respuesta HTTP o página renderizada | Establecer un tiempo de espera claro |
| Descubrir | Documento HTML | Enlaces candidatos | Resolver URLs relativas |
| Normalizar | URL candidata | URL canónica | Eliminar fragmentos y normalizar mayúsculas de host |
| Filtrar | URL canónica | URL aceptada o rechazada | Hacer cumplir dominio, ruta y alcance de profundidad |
| Deduplicar | URL aceptada | Nuevo ítem en la cola o registro existente | Clave en la forma canónica |
| Extraer | Contenido de la página | Registro estructurado | Tratar campos opcionales como anulables |
| Almacenar | Registro más procedencia | Conjunto de datos duradero | Preservar URL fuente y tiempo de colección |
Ruta A: Requests y Beautiful Soup para Páginas Estáticas
Requests es apropiado cuando la respuesta inicial ya contiene los enlaces y campos que el rastreador necesita. Beautiful Soup convierte el HTML en un árbol buscable.
Comience con una deque para un recorrido por amplitud, un conjunto para URLs canónicas visitadas y un límite estricto de páginas. Resuelva enlaces relativos con urljoin, luego verifique el nombre del host después de la resolución. La sinonimia genérica de URI define cómo los referentes relativos y fragmentos encajan en el modelo de URL.
No marque una URL como visitada solo después de una obtención exitosa. Márquela cuando entre en la cola; de lo contrario, dos páginas padres pueden programar el mismo hijo antes de que cualquiera de las solicitudes se complete.
Normalizar URLs Antes de la Deduplicación
La normalización de URL determina si /products, /products#reviews, y una URL absoluta equivalente se convierten en un objetivo de rastreo o tres. Un canonizador conservador debería:
- poner en minúsculas el esquema y el nombre del host;
- eliminar fragmentos;
- resolver segmentos de ruta
.y..; - eliminar puertos predeterminados;
- preservar parámetros de consulta a menos que su significado sea conocido;
- rechazar esquemas que no son HTTP antes de la programación.
La Especificación de URL de WHATWG documenta el comportamiento del analizador implementado por los navegadores modernos. Mantenga la normalización conservadora porque eliminar un parámetro de consulta desconocido puede colapsar recursos distintos.
Hacer Cumplir el Alcance, la Profundidad y el Presupuesto de Rastreo
Un rastreador necesita reglas de detención explícitas antes de enviar la primera solicitud. Defina hosts permitidos, prefijos de ruta aceptados, profundidad máxima y páginas máximas. La profundidad es el número de bordes de enlace desde la semilla, no un sustituto para la jerarquía del sitio.
Almacene el padre de descubrimiento con cada ítem de la cola. Eso crea un gráfico de URL que ayuda a explicar por qué se visitó una página y hace visibles patrones infinitos de calendario o navegación facetada.
Comienza a Raspando con Scrapeless
Potencia tu flujo de trabajo de raspado web y automatización con Scrapeless!
Regístrate hoy y obtén $5 en crédito gratis — sin necesidad de tarjeta de crédito.Reclama tu crédito gratis ahora en el Tablero de Scrapeless.
Respetar Robots y Política del Sitio
Las directrices de robots son parte de la planificación de rastreo, no un pensamiento posterior. El Protocolo de Exclusión de Robots define cómo los rastreadores descubren e interpretan las reglas robots.txt.
Verifique los términos y la ley aplicables, identifique el rastreador donde sea apropiado y mantenga la colección limitada a las páginas públicas permitidas. Una regla de robots no es un mecanismo de autorización, por lo que un camino permitido no reemplaza la revisión legal y contractual.
Ruta B: Playwright para páginas de JavaScript
Playwright es apropiado cuando los enlaces o campos requeridos aparecen solo después de la ejecución del lado del cliente. Dirija esas páginas a una rama de navegador después de demostrar que la respuesta inicial es incompleta.
Utilice domcontentloaded como el evento de navegación inicial, luego espere un estado de página específico vinculado a los datos. La guía de localización de Playwright recomienda atributos de rol, etiqueta, texto y otros atributos orientados al usuario cuando coinciden con el objetivo.
Cierre cada página y contexto del navegador después de la extracción. Los recursos del navegador no deben vivir en el mismo bucle ilimitado que las solicitudes HTTP ligeras.
Cuándo mover la ejecución del navegador a Scrapeless
Scrapeless Scraping Browser es útil cuando la rama de navegador del rastreador necesita sesiones gestionadas, enrutamiento geográfico y capacidad de navegador en producción. La guía de inicio rápido del Scraping Browser cubre la ruta de conexión actual.
Mantenga la cola del rastreador, las reglas de URL, el esquema de extracción y el almacenamiento bajo control de la aplicación. Mueva solo la capa de ejecución del navegador. Esta separación permite que las páginas estáticas permanezcan en Requests mientras que las páginas dinámicas utilizan un navegador gestionado.
Almacenar el estado de rastreo para reanudación
Persista los estados en cola, en progreso, completados, rechazados y fallidos por separado. Almacene la URL canónica, el padre de descubrimiento, la profundidad, el método de recuperación, el estado de respuesta, el hash de contenido y la versión del analizador.
Un hash de contenido evita que las páginas sin cambios vuelvan a entrar en el procesamiento posterior. Una versión de analizador hace que los cambios en el esquema sean rastreables cuando una actualización de selector altera la salida histórica.
Revise los precios de Scrapeless después de medir la proporción de páginas que realmente requieren ejecución del navegador. La guía de mejores prácticas del Scraping Browser explica cómo operar trabajos respaldados por navegador de manera confiable una vez que las páginas cruzan ese límite.
Conclusión
Un rastreador de Python confiable es un gráfico de URL controlado. Comience con Requests y Beautiful Soup, normalice antes de la deduplicación, haga cumplir el alcance antes de la programación y dirija solo las páginas dependientes de JavaScript a través de Playwright o Scrapeless Scraping Browser.
¿Listo para construir una tubería de rastreo controlada?
Únase a desarrolladores que construyen tuberías de datos web en Discord o Telegram. Cree una cuenta en app.scrapeless.com y mida la rama del navegador contra su conjunto real de URL.
FAQ
P: ¿Cuál es la diferencia entre rastrear y extraer?
Rastrear descubre y programa páginas; extraer extrae campos de una página. Un pipeline puede hacer ambas cosas, pero los estados y salidas separados facilitan la operación.
P: ¿Es legal el rastreo web?
El rastreo web puede ser legal cuando accede a páginas públicas permitidas, pero los requisitos varían según la jurisdicción y el sitio. Revise los términos aplicables, las obligaciones de privacidad y el asesoramiento legal para el caso de uso.
P: ¿Necesita un rastreador de Python un proxy?
Un proxy es útil cuando la colección autorizada requiere enrutamiento geográfico o salida distribuida. No cambia la obligación del rastreador de respetar el alcance y la política.
P: ¿Cómo debe manejar un rastreador una página de Acceso Denegado?
Registre la página como un resultado de acceso distinto, detenga la extracción para esa URL y revise la sesión, la salida y las suposiciones de autorización antes de continuar con el flujo de trabajo.
P: ¿Qué sucede cuando cambia el DOM?
Revise nuevamente los selectores de descubrimiento y extracción contra los fixtures guardados, actualice la versión del analizador y trate los campos ausentes como anulables hasta que se confirme el nuevo esquema.
P: ¿Cuánta concurrencia debe usar un rastreador?
Comience con no más de tres trabajadores por host y baje el límite cuando la política del sitio o el comportamiento del servidor lo requieran. Los trabajos del navegador deberían utilizar un grupo de capacidad separado y más restringido.
P: ¿Puede el rastreador funcionar sin un agente de IA?
Sí. La cola, la política de URL, el cliente HTTP, la rama del navegador y el pipeline de almacenamiento pueden funcionar como servicios de Python ordinarios sin un modelo.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



