CodeGym /Cours /Python SELF FR /Chargement de contenu dynamique avec requests_html

Chargement de contenu dynamique avec requests_html

Python SELF FR
Niveau 33 , Leçon 4
Disponible

1. Contenu dynamique et JavaScript

Si tu maîtrises déjà les bases du web scraping avec des bibliothèques comme BeautifulSoup et requests, il est temps de plonger dans les aspects plus passionnants de cette discipline. Aujourd'hui, on va parler de comment travailler avec le contenu qui se charge dynamiquement uniquement au fur et à mesure du scroll de la page. Ton navigateur ne sera plus le seul fan des scroll infinis, tu pourras désormais enseigner cela à tes scripts aussi ! 🤖

Le web regorge de pages avec du contenu chargé dynamiquement, où les données se mettent à jour et apparaissent uniquement lors d'interactions avec JavaScript, qui, à son tour, "fait de la magie" côté client. Cela peut être à la fois une bénédiction et une malédiction pour un web scraper. D'un côté, ces sites peuvent être plus interactifs et conviviaux pour les utilisateurs, et d'un autre côté, scrapper ces pages devient plus difficile parce que la bibliothèque requests ne comprend pas JavaScript.

2. Bibliothèque requests_html

Heureusement, comme tu le sais peut-être déjà, le monde nous offre requests_html — une bibliothèque qui combine la puissance de requests et les capacités de rendu proche d’un navigateur grâce à Pyppeteer. Cette bibliothèque te permet de charger et de rendre des pages avec du contenu dynamique, te donnant la possibilité d'exécuter du JavaScript et même de scroller des pages.

Installation de requests_html

Pour commencer, il faut installer la bibliothèque. Si ce n'est pas encore fait, exécute cette commande :

Bash
pip install requests-html

Travailler avec requests_html

Une fois installé, voyons comment utiliser requests_html pour charger et manipuler du contenu dynamique.

Exemple : Chargement et rendu d'une page

Commençons par un cas simple : charger une page, exécuter du JavaScript et extraire des données. Regardons un exemple où l’on charge une page et obtient le texte d’un élément qui n’apparaît qu’après l’exécution de JavaScript.

Python

from requests_html import HTMLSession

# Création de la session
session = HTMLSession()

# Chargement de la page
response = session.get('https://example.com/dynamic-page')

# Exécution de JavaScript pour le rendu de la page
response.html.render()

# Extraction du texte de l'élément apparaissant après le rendu
content = response.html.find('#dynamic-content', first=True)
print(content.text)

Dans cet exemple, nous utilisons la méthode render() pour permettre à requests_html d'exécuter du JavaScript sur la page et de rendre le contenu qui pourrait être caché lors d’un chargement standard.

3. Défilement automatique des pages

Parfois, le contenu dynamique ne se charge pas immédiatement, mais uniquement lorsqu'on défile la page. requests_html peut aider ici aussi, en te permettant de simuler le défilement de la page et de charger plus de données.

Exemple de défilement automatique

Imaginons que tu as une page avec un flux infini de nouvelles, et que tu veux extraire autant d’éléments que possible. Voici comment faire :

Python

from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com/infinite-scroll')

# Rendu et défilement de la page
response.html.render(scrolldown=5, sleep=1)

# Extraction de tous les éléments de nouvelles
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

Ici, la méthode render() est enrichie avec les paramètres scrolldown et sleep, qui indiquent le nombre de fois où nous allons défiler la page vers le bas ainsi que le temps d’attente entre chaque défilement.

4. Applications pratiques

Pourquoi s'embêter avec des trucs comme le défilement automatique ? 🤔

  • Recherche marketing : De nombreuses entreprises utilisent ces pages pour afficher des données en continu, qui peuvent être utiles pour analyser les tendances et les comportements des consommateurs.
  • Suivi des réseaux sociaux : De nombreuses plateformes de réseaux sociaux utilisent des flux infinis, ce qui fait de requests_html un outil pratique pour le suivi et la collecte de données à partir de ces sources.
  • Actualités et mises à jour : Extraire des titres d'actualités et des articles depuis les flux infinis des sites d'actualités permet d’obtenir rapidement des informations pour analyse.

5. Erreurs courantes et leurs solutions

Lors du travail avec des pages dynamiques et requests_html, des erreurs peuvent souvent survenir. Regardons quelques cas fréquents :

Problème de rendu

Parfois, la méthode render() peut échouer, surtout si la page est trop grande ou complexe. Dans ces cas, augmenter le temps de rendu avec le paramètre timeout, ou réduire le nombre de défilements peut aider.

Python
response.html.render(timeout=30)

Exécution parasite de script

Il peut arriver que le JavaScript sur la page bloque l'exécution du script ou cause des problèmes. Tu peux essayer d'utiliser le paramètre wait pour attendre l'apparition des éléments nécessaires.

Python
response.html.render(wait=2)

Résolution d'écran et type de dispositif

Certains sites fournissent du contenu en fonction de la résolution de l'écran ou du type de dispositif. Vérifie quel user-agent est utilisé pour la requête et le contenu rendu.

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. Que lire d'autre

requests_html — un outil puissant, mais pour en tirer pleinement parti et éviter les erreurs courantes, explore la documentation officielle. Elle t’aidera à mieux comprendre comment gérer le défilement et rendre avec succès des pages complexes.

À ce stade, tu es armé de tout ce dont tu as besoin pour ne pas avoir peur du contenu dynamique et des flux infinis. Sois prudent, n'oublie pas d'indiquer que ton script est un hacker éthique, aimant aider les gens à automatiser leurs tâches, et pas un méchant ! 😇

1
Étude/Quiz
Lecture de contenu dynamique, niveau 33, leçon 4
Indisponible
Lecture de contenu dynamique
Lecture de contenu dynamique
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION