CodeGym /Curso de Java /Python SELF ES /Enfoques principales para recorrer múltiples páginas

Enfoques principales para recorrer múltiples páginas

Python SELF ES
Nivel 38 , Lección 2
Disponible

1. Uso del botón «Siguiente»

Si en el sitio existe un botón o enlace «Siguiente» para pasar a la siguiente página, puedes configurar un bucle para hacer clic en este botón mientras esté disponible.

Ejemplo de código

Python

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    # Ejemplo de recolección de datos en la página actual
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)  # Aquí puedes guardar o procesar los datos
    
def click_next_button(driver):
    try:
        next_button = driver.find_element(By.LINK_TEXT, "Next")
        next_button.click()
        return True
    except NoSuchElementException:
        return False  # El botón no está presente, hemos llegado a la última página

def main():
    driver = initialize_driver()
    open_page(driver, "https://example.com/page1")

    try:
        while True:
            collect_data(driver)
            if not click_next_button(driver):
                break  # Sal del bucle si no hay botón "Next"
            time.sleep(2)  # Pausa para cargar la siguiente página
    finally:
        driver.quit()

main()

Explicación del código

initialize_driver() — inicializa el driver.
open_page() — abre la primera página para comenzar el trabajo.
collect_data() — función para recolectar datos de la página actual.
click_next_button() — función que encuentra y hace clic en el botón «Next». Si el botón no está, devuelve False, indicando que se completó la navegación.
Bucle en main() — bucle principal para recorrer las páginas. Termina cuando el botón «Next» ya no existe.

2. Paginación usando números de página

En algunos sitios, hay enlaces numerados de páginas (por ejemplo, «1», «2», «3» y así sucesivamente). En estos casos, puedes crear una lista de enlaces y navegar por cada una secuencialmente.

Ejemplo de código

Python

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)

def go_to_page(driver, page_number):
    page_link = driver.find_element(By.LINK_TEXT, str(page_number))
    page_link.click()

def main():
    driver = initialize_driver()
    open_page(driver, "https://example.com/page1")

    try:
        total_pages = 5  # Indica el número total de páginas si se conoce
        for page in range(1, total_pages + 1):
            collect_data(driver)
            if page < total_pages:  # No pases a la siguiente página después de la última
                go_to_page(driver, page + 1)
                time.sleep(2)  # Pausa para cargar la siguiente página
    finally:
        driver.quit()

main()

Explicación del código

go_to_page() — función que encuentra el enlace a la página deseada utilizando su número y navega a ella.
Bucle en main() — usa la variable total_pages para determinar el número de páginas. El bucle navega a la siguiente página hasta alcanzar la última.

3. Cambiar el URL para cada página

Algunos sitios tienen una estructura simple de URL, donde cada página está identificada por un número en el URL, por ejemplo, https://example.com/page/1, https://example.com/page/2 y así sucesivamente. En este caso, puedes modificar el URL directamente para cargar las páginas necesarias, evitando la necesidad de buscar elementos.

Ejemplo de código

Python

from selenium import webdriver
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    items = driver.find_elements_by_class_name("item_class")
    for item in items:
        print(item.text)

def main():
    driver = initialize_driver()

    try:
        total_pages = 5  # Indica el número total de páginas si se conoce
        base_url = "https://example.com/page/"
        
        for page_number in range(1, total_pages + 1):
            url = f"{base_url}{page_number}"
            open_page(driver, url)
            collect_data(driver)
            time.sleep(2)  # Pausa para cargar la siguiente página
    finally:
        driver.quit()

main()

Explicación del código

Variable base_url contiene la URL base de la página. El bucle completa esta URL con el número de página y abre cada página en orden.
El bucle genera el URL de cada página y recolecta datos sin hacer clics en los elementos, reduciendo la probabilidad de errores.

4. Consejos de optimización

  • Minimiza las esperas y clics sobre elementos dinámicos: Usar enlaces y URLs es más estable que hacer clic en botones cargados por JavaScript.
  • Usa temporizadores con un retraso mínimo: Al navegar a una nueva página, usa pequeños retrasos time.sleep(2) para permitir que los elementos se carguen sin esperar más de lo necesario.
  • Recopila datos tras cargar toda la página: Asegúrate de que los datos en la página estén completamente cargados antes de comenzar su recolección. Usa implicitly_wait para detectar elementos de manera confiable.
  • Logging: Implementa un registro para capturar la página actual, errores y navegaciones exitosas. Esto facilita la depuración del script.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION