1. Preparación para la navegación
Antes de comenzar nuestras grandes aventuras, necesitamos prepararnos con las herramientas adecuadas: Selenium y un poco de ingenio. Supongamos que ya sabes cómo configurar Selenium y un driver para el navegador, ¡así que allá vamos!
Configuración del driver
from selenium import webdriver
# Lanzamos el driver del navegador, por ejemplo, Chrome
driver = webdriver.Chrome()
# Abrimos la primera página de nuestra aventura
driver.get("http://example.com/start-page")
Hasta ahora todo estándar: abrimos el navegador y cargamos la página de inicio. Pero aquí empieza la diversión: no queremos quedarnos atrapados en una sola página. ¡Queremos visitar todas sus vecinas!
2. Paginación: un paseo por las páginas
La forma más sencilla y amistosa de navegar por las páginas es usando la paginación. Todos habéis visto esos simpáticos números al final de las páginas, ¿verdad? Son como señales de tráfico: «Tu próxima parada: Página 2».
Extracción de datos de las páginas
Antes de comenzar nuestro viaje, queremos recopilar información de la página actual. Supongamos que son listas de productos o encabezados de artículos.
def extract_data():
# Encontramos todos los elementos que nos interesan en la página, por ejemplo, encabezados
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Sí, simplemente imprimimos el texto, pero puedes guardarlo donde quieras
extract_data()
Si te saltaste las clases anteriores, este fragmento de código busca todos los encabezados con la clase item-title
y los imprime.
Navegación a la siguiente página
Ahora que estamos armados con los datos, es hora de avanzar. La paginación generalmente se presenta en forma de botones con enlaces a la siguiente o la página anterior. Debemos encontrar esos botones y hacer clic en ellos.
def go_to_next_page():
try:
# Encontramos el botón de la siguiente página y hacemos clic en él
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Si no hay botón, significa que hemos llegado al final
print("Fin de la lista de páginas.")
Esta función busca un enlace con el texto «Next»
. Si lo encuentra, hace clic en él para pasar a la siguiente página. Si no, nuestro bot entiende que ha llegado al final de Internet... bueno, al menos de esta secuencia de páginas.
3. Recorrido cíclico de páginas
¿Qué nos falta para la felicidad completa? ¡Correcto, un bucle! Vamos a combinar todo esto en un bucle práctico para que nuestro bot pueda recorrer las páginas disponibles como un verdadero profesional.
while True:
extract_data() # Recopilamos datos de la página actual
go_to_next_page() # Pasamos a la siguiente
time.sleep(2) # Descansamos un poco para no asustar al servidor
Ahora nuestro bot recorre valientemente todas las páginas donde se puede hacer clic en el botón «Next»
. Este código se ejecutará hasta que no queden más páginas. Recuerda que una pequeña pausa entre las solicitudes es tu amistad con el servidor. A nadie le gustan los spammers, especialmente a los administradores de sitios.
4. Interacción dinámica
Amigos, la vida no es tan simple como estos ejemplos de paginación. A veces, una página se comporta como un ninja esquivo, cargando datos dinámicamente a medida que se desplaza. No te preocupes, también lo solucionaremos.
Espera explícita
Las esperas permiten que tu código medite un poco hasta que el elemento que necesitas esté disponible. Esto es especialmente útil cuando el contenido no se carga de inmediato.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Elemento no encontrado.")
Con esta función, tu bot estará en armonía con el contenido cargado dinámicamente, esperando hasta que los elementos estén disponibles.
Desplazamiento de la página
Con contenido dinámico en páginas mágicas como el desplazamiento infinito, puede ser necesario desplazarse hacia abajo en la página para cargar más elementos.
def scroll_down():
# Usamos JavaScript para desplazarnos hacia abajo
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
El script en JavaScript ayuda a realizar un desplazamiento suave hacia abajo, permitiendo que la página cargue más contenido. Este truco se puede usar en un bucle para recorrer el desplazamiento infinito.
5. Particularidades y trucos
Ir más allá de los ejemplos es un tomo de aventuras lleno de sorpresas. Imagina que tu bot, como tú, debe estar preparado para diferentes escenarios.
Si no hay botón «Next»
, pero hay paginación con números de página, utiliza un enfoque dinámico sustituyendo el número en la URL directamente. Y si tu sitio de repente decide convertirse en un ninja y ocultar algunas páginas, ajusta tus scripts para que puedan adaptarse y estar preparados para las sorpresas.
GO TO FULL VERSION