Maison >développement back-end >Tutoriel Python >Gratter des pages à défilement infini avec un bouton « Charger plus » : un guide étape par étape

Gratter des pages à défilement infini avec un bouton « Charger plus » : un guide étape par étape

Patricia Arquette
Patricia Arquetteoriginal
2025-01-13 18:09:43791parcourir

Vos scrapers sont-ils bloqués lorsque vous essayez de charger des données à partir de pages Web dynamiques ? Êtes-vous frustré par les défilements infinis ou ces satanés boutons « Charger plus » ?

Vous n'êtes pas seul. Aujourd'hui, de nombreux sites Web mettent en œuvre ces conceptions pour améliorer l'expérience utilisateur, mais elles peuvent s'avérer difficiles pour les web scrapers.

Ce didacticiel vous guidera à travers une procédure pas à pas adaptée aux débutants pour gratter une page de démonstration avec un bouton Charger plus. Voici à quoi ressemble la page Web cible :

Demo web page for scraping

À la fin, vous apprendrez à :

  • Configurez Selenium pour le web scraping.
  • Automatisez l'interaction du bouton « Charger plus ».
  • Extraire les données sur les produits telles que les noms, les prix et les liens.

Plongeons-nous !

Étape 1 : prérequis

Avant de vous lancer, assurez-vous des prérequis suivants :

  • Python installé : téléchargez et installez la dernière version de Python depuis python.org, y compris pip lors de l'installation.
  • Connaissances de base : Familiarité avec les concepts de web scraping, la programmation Python et l'utilisation de bibliothèques telles que les requêtes, BeautifulSoup et Selenium.

Bibliothèques requises :

  • Demandes : Pour envoyer des requêtes HTTP.
  • BeautifulSoup : Pour analyser le contenu HTML.
  • Selenium : pour simuler les interactions des utilisateurs, telles que les clics sur des boutons dans un navigateur.

Vous pouvez installer ces bibliothèques en utilisant la commande suivante dans votre terminal :

pip install requests beautifulsoup4 selenium

Avant d'utiliser Selenium, vous devez installer un pilote Web correspondant à votre navigateur. Pour ce didacticiel, nous utiliserons Google Chrome et ChromeDriver. Cependant, vous pouvez suivre des étapes similaires pour d'autres navigateurs comme Firefox ou Edge.

Installer le pilote Web

  1. Vérifiez la version de votre navigateur :
  2. Ouvrez Google Chrome et accédez à Aide > À propos de Google Chrome dans le menu à trois points pour trouver la version de Chrome.

  3. Télécharger le pilote Chrome :

  4. Visitez la page de téléchargement de ChromeDriver.

  5. Téléchargez la version du pilote qui correspond à votre version de Chrome.

  6. Ajoutez ChromeDriver à votre système PATH :
    Extrayez le fichier téléchargé et placez-le dans un répertoire tel que /usr/local/bin (Mac/Linux) ou C:WindowsSystem32 (Windows).

Vérifier l'installation

Initialisez un fichier Python scraper.py dans le répertoire de votre projet et testez que tout est correctement configuré en exécutant l'extrait de code suivant :

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Vous pouvez exécuter le code du fichier ci-dessus en exécutant la commande suivante sur votre terminal :

pip install requests beautifulsoup4 selenium

Si le code ci-dessus s'exécute sans erreur, il lancera une interface de navigateur et ouvrira l'URL de la page de démonstration comme indiqué ci-dessous :

Demo Page in Selenium Browser Instance

Selenium extraira ensuite le HTML et imprimera le titre de la page. Vous verrez une sortie comme celle-ci -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Cela vérifie que Selenium est prêt à être utilisé. Une fois toutes les exigences installées et prêtes à être utilisées, vous pouvez commencer à accéder au contenu de la page de démonstration.

Étape 2 : accéder au contenu

La première étape consiste à récupérer le contenu initial de la page, ce qui vous donne un instantané de base du code HTML de la page. Cela vous aidera à vérifier la connectivité et à garantir un point de départ valide pour le processus de scraping.

Vous récupérerez le contenu HTML de l'URL de la page en envoyant une requête GET à l'aide de la bibliothèque Requests en Python. Voici le code :

python scraper.py

Le code ci-dessus affichera le HTML brut contenant les données des 12 premiers produits.

Cet aperçu rapide du code HTML garantit que la demande a abouti et que vous travaillez avec des données valides.

Étape 3 : Charger plus de produits

Pour accéder aux produits restants, vous devrez cliquer par programme sur le bouton « Charger plus » sur la page jusqu'à ce qu'il n'y ait plus de produits disponibles. Étant donné que cette interaction implique JavaScript, vous utiliserez Selenium pour simuler le clic sur le bouton.

Avant d'écrire du code, inspectons la page pour localiser :

  • Le sélecteur de bouton "Charger plus" (load-more-btn).
  • Le div contenant les détails du produit (product-item).

Vous obtiendrez tous les produits en chargeant plus de produits, ce qui vous donnera un ensemble de données plus grand en exécutant le code suivant :

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

Ce code ouvre le navigateur, accède à la page et interagit avec le bouton « Charger plus ». Le HTML mis à jour, contenant désormais plus de données produit, est ensuite extrait.

Si vous ne souhaitez pas que Selenium ouvre le navigateur à chaque fois que vous exécutez ce code, il fournit également des fonctionnalités de navigateur sans tête. Un navigateur sans tête possède toutes les fonctionnalités d'un véritable navigateur Web mais pas d'interface utilisateur graphique (GUI).

Vous pouvez activer le mode sans tête pour Chrome dans Selenium en définissant un objet ChromeOptions et en le transmettant au constructeur WebDriver Chrome comme ceci :

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

Lorsque vous exécutez le code ci-dessus, Selenium lancera une instance Chrome sans tête, vous ne verrez donc plus de fenêtre Chrome. C'est idéal pour les environnements de production où vous ne souhaitez pas gaspiller de ressources sur l'interface graphique lors de l'exécution du script de scraping sur un serveur.

Maintenant que le contenu HTML complet est récupéré, il est temps d'extraire des détails spécifiques sur chaque produit.

Étape 4 : analyser les informations sur le produit

Dans cette étape, vous utiliserez BeautifulSoup pour analyser le HTML et identifier les éléments du produit. Ensuite, vous extrairez les détails clés de chaque produit, tels que le nom, le prix et les liens.

pip install requests beautifulsoup4 selenium

Dans le résultat, vous devriez voir une liste structurée de détails sur le produit, y compris le nom, l'URL de l'image, le prix et le lien vers la page du produit, comme ceci -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Le code ci-dessus organisera les données HTML brutes dans un format structuré, ce qui facilitera l'utilisation et la préparation des données de sortie pour un traitement ultérieur.

Étape 5 : Exporter les informations sur le produit au format CSV

Vous pouvez désormais organiser les données extraites dans un fichier CSV, ce qui facilite leur analyse ou leur partage. Le module CSV de Python y contribue.

python scraper.py

Le code ci-dessus créera un nouveau fichier CSV avec tous les détails requis sur le produit.

Voici le code complet pour un aperçu :

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

Le code ci-dessus créera un products.csv qui ressemblerait à ceci :

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

Étape 6 : Obtenez des données supplémentaires pour les meilleurs produits

Maintenant, disons que vous souhaitez identifier les 5 produits les plus chers et extraire des données supplémentaires (telles que la description du produit et le code SKU) de leurs pages individuelles. Vous pouvez le faire en utilisant le code comme suit :

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Set up the WebDriver (make sure you have the appropriate driver installed, e.g., ChromeDriver)
driver = webdriver.Chrome()
# Open the page
driver.get("https://www.scrapingcourse.com/button-click")
# Loop to click the "Load More" button until there are no more products
while True:
    try:
        # Find the "Load more" button by its ID and click it
        load_more_button = driver.find_element(By.ID, "load-more-btn")
        load_more_button.click()
        # Wait for the content to load (adjust time as necessary)
        time.sleep(2)
    except Exception as e:
        # If no "Load More" button is found (end of products), break out of the loop
        print("No more products to load.")
        break
# Get the updated page content after all products are loaded
html_content = driver.page_source
# Close the browser window
driver.quit()

Voici le code complet pour un aperçu :

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

import time

# instantiate a Chrome options object
options = webdriver.ChromeOptions()

# set the options to use Chrome in headless mode
options.add_argument("--headless=new")

# initialize an instance of the Chrome driver (browser) in headless mode
driver = webdriver.Chrome(options=options)

...

Ce code trie les produits par prix par ordre décroissant. Ensuite, pour les 5 produits les plus chers, le script ouvre leurs pages de produits et extrait la description du produit et le SKU à l'aide de BeautifulSoup.

La sortie du code ci-dessus ressemblera à ceci :

from bs4 import BeautifulSoup
# Parse the page content with BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Extract product details
products = []
# Find all product items in the grid
product_items = soup.find_all('div', class_='product-item')
for product in product_items:
    # Extract the product name
    name = product.find('span', class_='product-name').get_text(strip=True)

    # Extract the product price
    price = product.find('span', class_='product-price').get_text(strip=True)

    # Extract the product link
    link = product.find('a')['href']

    # Extract the image URL
    image_url = product.find('img')['src']

    # Create a dictionary with the product details
    products.append({
        'name': name,
        'price': price,
        'link': link,
        'image_url': image_url
})
# Print the extracted product details
for product in products[:2]:
    print(f"Name: {product['name']}")
    print(f"Price: {product['price']}")
    print(f"Link: {product['link']}")
    print(f"Image URL: {product['image_url']}")
    print('-' * 30)

Le code ci-dessus mettra à jour le products.csv et il contiendra désormais des informations comme celle-ci :

Name: Chaz Kangeroo Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/chaz-kangeroo-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh01-gray_main.jpg
------------------------------
Name: Teton Pullover Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/teton-pullover-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh02-black_main.jpg
------------------------------
…

Conclusion

Gratter des pages avec un défilement infini ou des boutons « Charger plus » peut sembler difficile, mais l'utilisation d'outils tels que Requests, Selenium et BeautifulSoup simplifie le processus.

Ce tutoriel a montré comment récupérer et traiter les données produit à partir d'une page de démonstration, en les enregistrant dans un format structuré pour un accès rapide et facile.

Voir tous les extraits de code ici.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn