Contenido del curso
Web Estático Avanzado
Scraping Dinámico con Selenium
Scraping Dinámico con Playwright
Playwright para scraping con scroll infinito
Resumen
Si buscas una alternativa a Selenium para hacer web scraping y testing en Python, Playwright es la herramienta que necesitas conocer. Aquí aprenderás cómo instalarla, ejecutar tu primer script asincrónico y manejar páginas con scroll infinito sin depender siempre de Beautiful Soup.
¿Qué es Playwright y por qué usarlo en lugar de Selenium?
Playwright es una librería pensada para automatizar navegadores con un enfoque moderno. Su gran diferencia frente a Selenium está en tres puntos que cambian el flujo de trabajo.
- Soporte asincrónico nativo, ideal para tareas que requieren esperar contenido dinámico [00:14].
- Interacciones avanzadas más simples de programar.
- Compatibilidad con múltiples navegadores desde una sola instalación.
¿Playwright reemplaza a Selenium? No siempre, pero para scraping moderno y testing con páginas dinámicas resulta más simple y rápido gracias a su soporte asincrónico nativo.
¿Cómo se instala Playwright en Python paso a paso?
La instalación tiene dos fases que conviene no saltarse, porque la segunda descarga los drivers que permiten controlar los navegadores.
- Instala la librería con el gestor de paquetes de Python desde tu terminal, en este caso PowerShell en Windows [00:42].
- Ejecuta
playwright installpara descargar los drivers de los navegadores compatibles [01:04]. - Espera unos minutos a que termine la descarga antes de ejecutar tu primer script.
Un detalle importante: aunque hasta ahora venías trabajando con notebooks, Playwright recomienda usar archivos .py directamente. La razón está en sus integraciones asincrónicas nativas, que no se llevan bien con el entorno de notebooks [01:30].
¿Cómo hacer tu primer scraping asincrónico con Playwright?
El flujo combina tres piezas: asyncio para manejar la asincronía, Playwright para controlar el navegador y Beautiful Soup para parsear el HTML renderizado.
python import asyncio from playwright.async_api import async_playwright from bs4 import BeautifulSoup
async def scrape(): async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto("URL_scroll_infinito") await page.wait_for_timeout(3000) html = await page.content() soup = BeautifulSoup(html, "html.parser") # extraer frases con soup await browser.close()
asyncio.run(scrape())
El script abre el navegador, navega a la URL del scroll infinito, espera 3000 milisegundos para que cargue el contenido y recién entonces obtiene el HTML renderizado [02:10]. Con eso ya puedes seguir usando Beautiful Soup como venías haciéndolo. En la primera carga obtienes las 10 citas iniciales, igual que pasaba con Selenium [02:48].
¿Por qué Playwright usa milisegundos en las esperas? Porque su API maneja tiempos en milisegundos, así que para esperar dos segundos debes pasar
2000y para tres segundos,3000.
¿Cómo manejar scroll infinito con Playwright sin Beautiful Soup?
Aquí viene lo interesante: Playwright ofrece métodos propios para localizar y extraer elementos, así que en muchos casos puedes prescindir de Beautiful Soup. Soporta tanto páginas estáticas como dinámicas dentro del mismo flujo.
La lógica para el scroll infinito sigue esta estructura.
- Definir la función como
asyncy declarar la URL objetivo. - Lanzar el navegador, abrir la página y navegar con
goto[03:30]. - Obtener la altura inicial del scroll para comparar después.
- Ejecutar varios scrolls esperando dos segundos entre cada uno (
2 * 1000milisegundos). - Buscar los elementos directamente con un selector como
quote .textusando los métodos de Playwright [04:00]. - Validar si se alcanzó el final del scroll comparando alturas y detener el proceso si no hay más contenido.
Esta validación funciona como en Selenium: si la altura no cambia tras hacer scroll, sabes que llegaste al fondo. Si cambió, actualizas la altura y sigues bajando.
¿Qué resultado obtienes con el scroll automatizado?
Al ejecutar el script, el navegador se abre, recibe la URL y comienza a hacer scroll cada dos segundos. Cuando termina, cierra el navegador y devuelve el total de frases únicas encontradas. En el ejemplo de la clase, el resultado fue de 40 citas recolectadas [04:35], cuatro veces más que la carga inicial.
¿Necesito Beautiful Soup si uso Playwright? No es obligatorio. Playwright permite seleccionar y extraer elementos directamente, aunque puedes combinarlos si te sientes más cómodo con la sintaxis de Beautiful Soup.
Conceptos y habilidades clave para dominar Playwright
Más allá del código, hay nociones que conviene tener claras para sacarle provecho a esta herramienta.
- asyncio: módulo de Python que permite ejecutar funciones de forma asincrónica, base sobre la que opera Playwright [01:40].
- HTML renderizado: contenido final que ve el usuario después de que JavaScript se ejecuta, distinto al HTML inicial que devuelve una petición HTTP.
- Drivers de navegador: componentes que Playwright instala con
playwright installpara controlar Chromium, Firefox y WebKit. - Scroll infinito: patrón web donde el contenido se carga progresivamente al bajar, lo que obliga a simular el desplazamiento para extraer todo.
¿Has probado Playwright en algún proyecto propio? Cuéntanos en los comentarios qué diferencias notaste frente a Selenium.