CodeGym /Cursos /Python SELF ES /Exploración de múltiples páginas con el uso mínimo de ele...

Exploración de múltiples páginas con el uso mínimo de elementos dinámicos

Python SELF ES
Nivel 38 , Lección 1
Disponible

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

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION