Recopilar datos de sitios web, comúnmente conocido como web scraping, es una técnica práctica para muchos proyectos. Bibliotecas como BeautifulSoup son excelentes para trabajar con HTML básico; sin embargo, a menudo tienen dificultades cuando las páginas dependen en gran medida de JavaScript para mostrar contenido. Ahí es donde entra Selenium para resolverlo.
En esta guía, aprenderás cómo usar Selenium con Python para extraer datos de sitios web de forma efectiva.
Lo primero: ¿qué es Selenium?
Selenium es un framework de automatización de navegadores diseñado para probar aplicaciones web. Simula el comportamiento real del usuario controlando un navegador real como Chrome o Firefox. Gracias a esto, puede manejar contenido renderizado con JavaScript que otras herramientas no pueden.
Esto convierte a Selenium en una excelente solución para extraer contenido de sitios web interactivos, formularios, scroll infinito y más.
Cómo instalar Selenium
Para empezar, instala Selenium con pip:
pip install selenium
Cómo configurar un WebDriver
Selenium requiere un WebDriver para comunicarse con el navegador. Aquí tienes un ejemplo sencillo usando Chrome:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service("/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
Si quieres ejecutar el navegador sin abrir una ventana (útil en servidores), activa el modo headless:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
Cómo encontrar elementos en la página
Puedes usar distintas estrategias para localizar elementos HTML:
from selenium.webdriver.common.by import By
element = driver.find_element(By.CLASS_NAME, "product-title")
Otras opciones de localizador son:
By.IDBy.TAG_NAMEBy.CSS_SELECTORBy.XPATH
Esperar a que JavaScript cargue
En lugar de usar time.sleep(), Selenium admite esperas inteligentes con WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content"))
)
Ejecutar JavaScript
Si necesitas desplazarte por la página o activar elementos que cargan mal, puedes ejecutar JavaScript:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Cómo tomar capturas de pantalla
Captura una captura de pantalla de la vista actual con:
driver.save_screenshot("screenshot.png")
Manejar la paginación
Para extraer datos de varias páginas, puedes recorrer enlaces o interactuar con un botón «Siguiente»:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
Exportar datos
Puedes usar la biblioteca Pandas para guardar los datos extraídos en un archivo CSV:
import pandas as pd
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)
Desplazarse con teclas
Para simular pulsaciones de teclas como PAGE_DOWN o END:
from selenium.webdriver.common.keys import Keys
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys(Keys.END)
Bloquear imágenes y otros recursos
Para acelerar el scraping y reducir el uso de recursos:
driver.execute_cdp_cmd("Network.setBlockedURLs", {"urls": ["*.jpg", "*.png"]})
¿Cómo se compara Selenium con otras herramientas?
| Herramienta | Soporte JavaScript | Velocidad | Caso de uso ideal |
|---|---|---|---|
| Selenium | Completo | Moderada | Páginas interactivas/dinámicas |
| BeautifulSoup | Ninguno | Rápida | Scraping de HTML estático |
| Scrapy | Opcional (a través de Selenium) | Muy rápida | Proyectos de scraping a gran escala |
| Puppeteer | Completo (solo Node.js) | Moderada | Scraping basado en Chromium headless |
¿Cuándo deberías usar Selenium?
Elige Selenium cuando:
- El sitio web depende principalmente de JavaScript
- Necesitas simular interacciones de usuario (clics, scroll e inputs)
- Estás trabajando en una tarea de scraping a pequeña o mediana escala
Para trabajos de scraping más grandes o más rápidos, considera herramientas como Scrapy, o APIs especializadas que se encargan de los proxies residenciales, CAPTCHA y JavaScript por ti.
Conclusión
Selenium es una opción perfecta para extraer datos de sitios web dinámicos con Python. Tras configurarlo, te permite extraer contenido de páginas complejas. Aunque no es la herramienta más rápida, su capacidad para automatizar un navegador real lo hace increíblemente flexible.
