1. Utilizzo del pulsante «Avanti»
Se un sito ha un pulsante o un link «Avanti» per passare alla pagina successiva, puoi configurare un ciclo per cliccare su questo pulsante finché è disponibile.
Esempio di codice
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):
# Esempio di raccolta dati dalla pagina corrente
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text) # Qui puoi salvare o elaborare i dati
def click_next_button(driver):
try:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
return True
except NoSuchElementException:
return False # Pulsante non trovato, siamo probabilmente all'ultima pagina
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 # Esci dal ciclo se il pulsante "Next" non è presente
time.sleep(2) # Ritardo per il caricamento della pagina successiva
finally:
driver.quit()
main()
Spiegazione del codice
initialize_driver()
— inizializza il driver.
open_page()
— apre la prima pagina per iniziare.
collect_data()
— funzione per raccogliere dati dalla pagina corrente.
click_next_button()
— funzione che trova e clicca sul pulsante «Next»
.
Se il pulsante non è presente, restituisce False
, indicando la fine della navigazione.
Ciclo in main()
— ciclo principale per navigare tra le pagine. Si arresta quando il pulsante «Next»
non è più trovato.
2. Paginazione utilizzando i numeri di pagina
Alcuni siti hanno link numerati alle pagine (ad esempio, «1», «2», «3» e così via). In questi casi, puoi raccogliere l'elenco dei link e navigare su ciascuno di essi in sequenza.
Esempio di codice
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 # Specificare il numero totale di pagine, se conosciuto
for page in range(1, total_pages + 1):
collect_data(driver)
if page < total_pages: # Non andare oltre l'ultima pagina
go_to_page(driver, page + 1)
time.sleep(2) # Ritardo per il caricamento della pagina successiva
finally:
driver.quit()
main()
Spiegazione del codice
go_to_page()
— funzione che trova il link della pagina desiderata per numero e vi accede.
Ciclo in main()
— utilizza la variabile
total_pages
per determinare il numero di pagine.
Il ciclo passa alla pagina successiva fino a raggiungere l'ultima.
3. Modifica dell'URL per ogni pagina
Alcuni siti hanno una struttura URL semplice in cui ogni pagina
è identificata da un numero nell'URL, ad esempio,
https://example.com/page/1
,
https://example.com/page/2
, ecc. In questo caso,
puoi semplicemente modificare l'URL e caricare la pagina desiderata
evitando di cercare elementi.
Esempio di codice
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 # Specificare il numero totale di pagine, se noto
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) # Ritardo per il caricamento della pagina successiva
finally:
driver.quit()
main()
Spiegazione del codice
Variabile base_url
contiene l'URL base della pagina.
Il ciclo completa l'URL con il numero della pagina e apre ciascuna pagina in sequenza.
Il ciclo genera l'URL di ciascuna pagina ed esegue la raccolta
dei dati senza cliccare sugli elementi. Questo minimizza
la probabilità di errori.
4. Consigli per l'ottimizzazione
- Minimizza le attese e i clic sugli elementi dinamici: Usare link e URL è più stabile rispetto a cliccare pulsanti caricati tramite JavaScript.
-
Utilizza timer di attesa con ritardi minimi:
Quando passi a una nuova pagina, usa un breve ritardo
time.sleep(2)
per permettere il caricamento, ma non rimanere in attesa più del necessario. -
Raccogli i dati dopo che la pagina è completamente caricata:
Assicurati che tutti i dati sulla pagina siano completamente caricati prima di iniziare la raccolta.
Usa
implicitly_wait
per rilevare in modo affidabile gli elementi. - Logging: Implementa un sistema di logging per registrare la pagina corrente, errori e passaggi riusciti. Questo semplifica il debug dello script durante l'esecuzione.
GO TO FULL VERSION