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
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
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
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.
GO TO FULL VERSION