Cómo raspar un sitio web detrás de un inicio de sesión con Python (2026)
Expert Network Defense Engineer
Después de años construyendo scrapers, los muros de inicio de sesión siguen siendo uno de los desafíos más difíciles. Esta guía se centra en métodos prácticos que funcionan en proyectos reales: desde inicios de sesión con formularios simples hasta protección CSRF y sitios protegidos por WAF modernos y sistemas anti-bot. Los ejemplos están en Python donde es relevante, y termino mostrando cómo usar un navegador remoto (Scrapeless Browser) para manejar las protecciones más difíciles.
Esta guía es solo para uso educativo. Respete los términos de servicio y las reglas de privacidad del sitio (por ejemplo, GDPR). No scrapee contenido al que no tenga permitido acceder.
Lo que cubre esta guía
- Scraping de sitios que requieren un nombre de usuario y una contraseña simples.
- Iniciar sesión en páginas que requieren un token CSRF.
- Acceder al contenido detrás de una protección WAF básica.
- Manejar protecciones avanzadas anti-bot usando un navegador remoto (Scrapeless Browser) controlado a través de Puppeteer.
¿Se puede scrapear sitios que requieren un inicio de sesión?
Sí, técnicamente puedes obtener páginas detrás de un inicio de sesión. Dicho esto, se aplican límites legales y éticos. Las plataformas sociales y los sitios con datos personales son especialmente sensibles. Siempre verifica la política de robots del sitio objetivo, los términos de servicio y la ley aplicable.
Técnicamente, los pasos clave son:
- Comprender el flujo de inicio de sesión.
- Reproducir las solicitudes necesarias (y los tokens) de manera programática.
- Persistir el estado autenticado (cookies, sesiones).
- Manejar verificaciones del lado del cliente cuando sea necesario.
1) Inicios de sesión simples con nombre de usuario + contraseña (Requests + BeautifulSoup)
Conclusión anticipada: Si el inicio de sesión es un formulario HTTP básico, usa una sesión y envía las credenciales mediante POST.
Instala las bibliotecas:
bash
pip3 install requests beautifulsoup4
Ejemplo de script:
python
import requests
from bs4 import BeautifulSoup
login_url = "https://www.example.com/login"
payload = {
"email": "admin@example.com",
"password": "password",
}
with requests.Session() as session:
r = session.post(login_url, data=payload)
print("Código de estado:", r.status_code)
soup = BeautifulSoup(r.text, "html.parser")
print("Título de la página:", soup.title.string)
Notas:
- Usa
Session()para que las cookies (ID de sesión) persistan para solicitudes posteriores. - Verifica los códigos de respuesta y el cuerpo para confirmar un inicio de sesión exitoso.
- Si el sitio utiliza redireccionamientos,
requestslos sigue por defecto; inspeccionar.historysi es necesario.
2) Inicios de sesión protegidos por CSRF (obtener token, luego enviar)
Conclusión anticipada: Muchos sitios requieren un token CSRF. Primero obtén la página de inicio de sesión, analiza el token, luego envía con el token.
Patrón:
- Obtén la página de inicio de sesión.
- Analiza el token oculto del formulario.
- Envía las credenciales + token utilizando la misma sesión.
Ejemplo:
python
import requests
from bs4 import BeautifulSoup
login_url = "https://www.example.com/login/csrf"
with requests.Session() as session:
r = session.get(login_url)
soup = BeautifulSoup(r.text, "html.parser")
csrf_token = soup.find("input", {"name": "_token"})["value"]
payload = {
"_token": csrf_token,
"email": "admin@example.com",
"password": "password",
}
r2 = session.post(login_url, data=payload)
soup2 = BeautifulSoup(r2.text, "html.parser")
products = []
for item in soup2.find_all(class_="product-item"):
products.append({
"Nombre": item.find(class_="product-name").text.strip(),
"Precio": item.find(class_="product-price").text.strip(),
})
print(products)
Consejos:
- Algunos frameworks utilizan diferentes nombres para los tokens; inspecciona el formulario para encontrar el nombre de entrada correcto.
- Envía encabezados apropiados (User-Agent, Referer) para parecer un navegador normal.
3) Verificaciones básicas de WAF / bot — usa un navegador sin cabeza cuando Requests falle
Cuando los encabezados y tokens no son suficientes, simula un navegador real con Selenium o un navegador sin cabeza.
Selenium + Chrome puede pasar muchas protecciones básicas porque ejecuta JavaScript y corre en un entorno de navegador completo. Si usas Selenium, añade esperas realistas, acciones de ratón/teclado y encabezados de navegador normales.
Sin embargo, algunos WAFs detectan la automatización a través de navigator.webdriver u otras heurísticas. Herramientas como undetected-chromedriver ayudan, pero no están garantizadas contra verificaciones avanzadas. Úsalas solo para un uso legítimo y permitido.
4) Protecciones avanzadas anti-bot — usa una sesión real de navegador remoto (Scrapeless Browser)
Obtén tu clave de API de Scrapeless
Inicia sesión en Scrapeless y obtén tu clave de API.
Para el enfoque más robusto, ejecuta un navegador real de forma remota (no una instancia local sin cabeza) y contrólalo a través de Puppeteer. Scrapeless Browser proporciona un punto final de navegador gestionado que reduce el riesgo de detección y descarga la complejidad de proxy/renderizado de JS.
Por qué esto ayuda:
- El navegador se ejecuta en un entorno gestionado que imita sesiones de usuario reales.
- JS se ejecuta exactamente como en un navegador real de usuario, por lo que pasan las verificaciones del lado del cliente.
- Puedes grabar sesiones y utilizar enrutamiento proxy según sea necesario.
A continuación se muestra un ejemplo que muestra cómo conectar Puppeteer a Scrapeless Browser y realizar un inicio de sesión automático. El fragmento utiliza puppeteer-core para conectarse a un endpoint WebSocket de Scrapeless. Reemplaza el token, your_email@example.com y your_password con tus propios valores y nunca compartas credenciales públicamente.
Importante: nunca comprometas credenciales reales o tokens de API en código público. Almacena secretos de forma segura (variables de entorno o un gestor de secretos).
import puppeteer from "puppeteer-core"
// 💡Habilitar "Usar configuraciones de Playground" sobrescribirá los parámetros de conexión de tu código de playground.
const query = new URLSearchParams({
token: "your-scrapeless-api-key",
proxyCountry: "ANY",
sessionRecording: true,
sessionTTL: 900,
sessionName: "Inicio de sesión automático",
})
const connectionURL = `wss://browser.scrapeless.com/api/v2/browser?${query.toString()}`
const browser = await puppeteer.connect({
browserWSEndpoint: connectionURL,
defaultViewport: null,
})
const page = await browser.newPage()
await page.goto("https://github.com/login")
await page.locator("input[name='login']").fill("your_email@example.com")
await page.locator("input[name='password']").fill("your_password")
await page.keyboard.press("Enter")
Notas sobre el ejemplo:
- El ejemplo utiliza
puppeteer-corepara adjuntarse a un navegador remoto. Scrapeless expone un endpoint WebSocket (browserWSEndpoint) que Puppeteer puede utilizar. - Las opciones de grabación de sesión y proxy se pasan en parámetros de consulta. Ajusta según tu plan de Scrapeless y necesidades.
- La lógica de espera importa: utiliza
waitUntil: "networkidle"owaitForSelectorexplícito para garantizar que la página se haya cargado completamente. - Reemplaza el token de marcador de posición con un secreto seguro de tu entorno.
Consejos prácticos y lista de verificación para evitar bloqueos
- Utiliza la API del sitio si existe. Es más segura y estable.
- Evita solicitudes paralelas rápidas; limita tu raspador.
- Rota IPs y huellas de sesión cuando sea legítimo y necesario. Utiliza proveedores de proxy de buena reputación.
- Utiliza encabezados realistas y manejo de cookies.
- Verifica robots.txt y términos del sitio. Si el sitio prohíbe el raspado, considera pedir permiso o utilizar feeds de datos oficiales.
- Registra los pasos que realiza tu raspador para facilitar la depuración (solicitudes, códigos de respuesta, redirecciones).
Resumen
Aprendiste cómo:
- Iniciar sesión y raspar páginas que aceptan un nombre de usuario/contraseña simples con
requests. - Extraer y utilizar tokens CSRF para autenticar de forma segura.
- Utilizar una herramienta de automatización de navegador cuando un sitio necesita renderizado completo de JS.
- Utilizar un navegador gestionado remoto (Scrapeless Browser) a través de Puppeteer para eludir protecciones avanzadas del lado del cliente mientras mantienes simple tu propio entorno.
Cuando las protecciones son fuertes, un enfoque de navegador gestionado es a menudo la ruta más confiable. Utilízalo de manera responsable y mantén seguras las credenciales y tokens de API.
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.



