CodeGym /Cours /Python SELF FR /Collecte de données avec les liens « Suivant »

Collecte de données avec les liens « Suivant »

Python SELF FR
Niveau 34 , Leçon 1
Disponible

1. Introduction à la pagination

Et qui a dit que les données dont tu as besoin seront sur une seule page ? Très souvent, il faut les extraire d'un tas de pages, ou elles sont même éparpillées sur tout le site. Donc, l'un des premiers défis auxquels tu seras confronté sera la séparation des données en pages. Et le travail passionnant de leur collecte est appelé "pagination".

Oui, la pagination, ce n'est pas seulement ce moment où tu attends de passer à la page suivante des résultats de Google, mais aussi quand un web scraper se demande : "Comment automatiser ça pour ne pas le faire manuellement ?"

La pagination est un moyen d'organiser les données sur un site afin d'éviter des pages interminables avec du contenu. À la place, les sites divisent les données en pages, ajoutant des liens comme "Suivant" ou "Page suivante" pour passer d'une page à l'autre. C'est un concept important, car en tant que web scraper, tu ne voudras pas dire à ton boss que tu as raté quelque chose parce que c'était caché sur la "cinquième page".

2. Problèmes avec le scraping de données sur plusieurs pages

Le premier problème auquel tu peux être confronté, c'est l'absence de URL intuitives et prévisibles. Certains sites ne modifient pas leur URL de manière évidente lorsque tu navigues entre les pages, ce qui rend l'automatisation assez compliquée. Par exemple, au lieu de page=1, page=2, tu peux te retrouver avec x=abc, x=def sans aucune logique apparente.

Le deuxième problème, c'est la protection contre les bots. Certains sites suivent activement le nombre de requêtes provenant d'une seule adresse IP. S'ils voient que tu en fais trop, tu peux être bloqué temporairement (ou même définitivement).

Mais ne t'inquiète pas, on va apprendre à contourner ces obstacles comme des pros du scraping.

3. Contourner la pagination

Techniques et stratégies

  1. Analyse de la structure des URLs : Généralement, les pages utilisent un paramètre dans l'URL pour indiquer le numéro de page, comme ?page=2. Si tu trouves ça, félicitations, tu as découvert un modèle en or pour contourner la pagination !
  2. Recherche de liens "Suivant" : Parfois, l'URL n'est pas prévisible. Dans ces cas-là, il faut chercher des liens "Suivant" ou "Page suivante" sur la page et les suivre.
  3. Utilisation des requêtes AJAX : Certains sites récupèrent des données via AJAX sans recharger la page. Dans ce cas, il faut intercepter ces requêtes et les reproduire.

Passons à la pratique !

Exemple de script pour contourner la pagination et collecter des données

Voyons un exemple de script :

Python

import requests
from bs4 import BeautifulSoup

# Fonction pour récupérer les données d'une page
def get_data_from_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # Ici, tu extrais les données de soup — exemple
        data = soup.find_all('div', class_='data-class')
        for item in data:
            print(item.text)  # Affiche ou enregistre les données
    else:
        print(f"Impossible de récupérer la page : {url}")

# Logique principale pour contourner la pagination
def scrape_all_pages(start_url):
    current_url = start_url
    while current_url:
        get_data_from_page(current_url)
        soup = BeautifulSoup(requests.get(current_url).text, 'html.parser')
        # On essaie de trouver le lien "Suivant"
        next_button = soup.find('a', text='Suivant')
        if next_button:
            current_url = next_button['href']
        else:
            current_url = None

# On commence le scraping à partir de la première page
start_url = 'http://example.com/page=1'
scrape_all_pages(start_url)

C'est un exemple de base qui montre le principe de fonctionnement avec la pagination. Tu devras l'adapter à la structure du site avec lequel tu travailles.

Gestion de session et utilisation de user-agent

Lorsque tu envoies de nombreuses requêtes à un site, il est utile d'utiliser une session et de changer le user-agent pour réduire le risque de blocage.

Python

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

session = requests.Session()
session.headers.update(headers)

response = session.get('http://example.com')

Cette structure permet de simuler un navigateur plus efficacement que simplement envoyer des requêtes avec des headers vides.

4. Implémentation pratique

Maintenant que nous connaissons les bases, compliquons un peu la tâche. Examinons un cas où les liens vers les pages ont des paramètres imprévisibles, et où il faut utiliser AJAX pour récupérer les données.

Implémentation avec AJAX

Parfois, les données ne sont pas chargées sur la page principale, mais via AJAX. Si tu découvres que le site fonctionne ainsi, utilise l'outil de débogage réseau de ton navigateur pour identifier quelles requêtes sont envoyées en arrière-plan. Ensuite, reproduis ces requêtes avec Python.

Python

# Exemple de requête AJAX
ajax_url = 'http://example.com/ajax_endpoint'

params = {
'some_param': 'value',  # paramètres nécessaires pour la requête
'page': 1
}

while True:
response = session.get(ajax_url, params=params)
data = response.json()
if not data['has_more']:
break
# Traitement des données
for item in data['items']:
print(item)
params['page'] += 1  # Passer à la page suivante

Cette méthode est utile lorsque, après une analyse approfondie des requêtes et des réponses, tu comprends comment les données sont chargées dans le navigateur.

La conférence d'aujourd'hui nous a plongés dans le monde fascinant et souvent imprévisible de la pagination. Cette compétence te permettra de collecter efficacement les données des sites sans rater une seule page. Après tout, comme dans la vie, en web scraping, la méthodologie et la persévérance sont cruciales, car qui sait quels trésors cachés se trouvent sur la vingtième page !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION