CodeGym /Cours Java /Python SELF FR /Approches principales pour parcourir plusieurs pages

Approches principales pour parcourir plusieurs pages

Python SELF FR
Niveau 38 , Leçon 2
Disponible

1. Utilisation du bouton « Suivant »

Si un site a un bouton ou un lien « Suivant » pour passer à la page suivante, tu peux configurer une boucle pour cliquer sur ce bouton tant qu'il est disponible.

Exemple de code

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):
    # Exemple de collecte de données sur la page actuelle
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)  # Ici, tu peux sauvegarder ou traiter les données
    
def click_next_button(driver):
    try:
        next_button = driver.find_element(By.LINK_TEXT, "Next")
        next_button.click()
        return True
    except NoSuchElementException:
        return False  # Bouton non trouvé, ce qui signifie que nous sommes sur la dernière page

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  # Quitter la boucle si le bouton "Next" est absent
            time.sleep(2)  # Pause pour charger la page suivante
    finally:
        driver.quit()

main()

Explication du code

initialize_driver() — initialisation du driver.
open_page() — ouverture de la première page pour commencer le travail.
collect_data() — fonction pour collecter des données de la page actuelle.
click_next_button() — fonction qui trouve et clique sur le bouton « Next ». Si le bouton est absent, elle renvoie False, ce qui signifie la fin du parcours.
Boucle dans main() — la boucle principale pour parcourir les pages. Elle termine le travail lorsque le bouton « Next » ne peut plus être trouvé.

2. Pagination avec numéros de pages

Sur certains sites, il y a des liens numérotés pour les pages (par exemple, « 1 », « 2 », « 3 », etc.). Dans ces cas, tu peux recueillir une liste de liens et y accéder un par un.

Exemple de code

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  # Indique le nombre total de pages si connu
        for page in range(1, total_pages + 1):
            collect_data(driver)
            if page < total_pages:  # Ne pas passer à la page suivante après la dernière
                go_to_page(driver, page + 1)
                time.sleep(2)  # Pause pour charger la page suivante
    finally:
        driver.quit()

main()

Explication du code

go_to_page() — fonction qui trouve le lien de la page souhaitée par son numéro et y accède.
Boucle dans main() — utilise la variable total_pages pour déterminer le nombre de pages. La boucle passe à la page suivante tant qu'elle n'est pas la dernière.

3. Modifier l'URL pour chaque page

Certains sites ont une structure simple d'URL, où chaque page est identifiée par un numéro dans l'URL, par exemple, https://example.com/page/1, https://example.com/page/2, etc. Dans ce cas, tu peux simplement modifier l'URL et charger la page souhaitée, évitant ainsi la recherche d'éléments.

Exemple de code

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  # Indique le nombre total de pages si connu
        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)  # Pause pour charger la page suivante
    finally:
        driver.quit()

main()

Explication du code

La variable base_url contient l'URL de base de la page. La boucle y ajoute le numéro de page et ouvre chaque page successivement.
Boucle génère l'URL de chaque page et collecte les données sans cliquer sur des éléments. Cela minimise les risques d'erreurs.

4. Astuces pour l’optimisation

  • Minimise les attentes et clics sur les éléments dynamiques : L'utilisation des liens et URL est plus stable que les clics sur des boutons chargés par JavaScript.
  • Utilise des temporisateurs avec un délai minimal : Lorsque tu passes à une nouvelle page, utilise un petit délai time.sleep(2) pour que les éléments aient le temps de se charger, mais ne prends pas plus de temps que nécessaire.
  • Récupère les données après le chargement complet de la page : Assure-toi que les données sur la page sont complètement chargées avant de commencer la collecte. Utilise implicitly_wait pour détecter les éléments de façon fiable.
  • Journalisation : Implémente une journalisation pour noter la page actuelle, les erreurs et les passages réussis. Cela simplifie le diagnostic du script lors de son exécution.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION