1. Introduction aux pages dynamiques
Si tu as déjà essayé de scraper des données depuis des sites qui mettent à jour le contenu en direct grâce à JavaScript, tu sais que cela peut devenir un vrai casse-tête. Mais ne te stresse pas ! Comme on dit, n’importe quel code compliqué peut être configuré pour ressembler à de la magie. Voyons comment requests_html nous permet de traiter ce type de contenu.
Comme tu le sais, toutes les pages web ne sont pas également utiles. Certaines chargent immédiatement leur contenu alors que d’autres peuvent le générer ou le mettre à jour dynamiquement avec JavaScript. Cela pose des défis pour ceux qui veulent extraire les données, car l’HTML que tu vois via les outils développeurs peut différer de celui que tu obtiens avec une requête standard.
Problèmes rencontrés lors du scraping de contenu dynamique
La plupart des bibliothèques web comme requests travaillent uniquement avec les réponses serveur et ne peuvent pas exécuter JavaScript. Cela signifie que si le contenu est chargé ou modifié via JavaScript, tu pourrais ne pas le voir du tout avec une requête classique.
2. Utilisation de la bibliothèque requests_html
C’est là que requests_html intervient — une bibliothèque qui combine la simplicité de requests et la puissance d'un navigateur pour exécuter JavaScript. Elle te fournit un moteur de rendu basique qui te permet d’interagir avec des pages web dynamiques comme si tu utilisais un vrai navigateur.
Installation et configuration de la bibliothèque
Pour démarrer, installons requests_html. Ouvre ton terminal préféré et exécute la commande suivante :
pip install requests-html
Magnifique, la bibliothèque est installée ! On peut maintenant commencer à travailler avec.
Les bases de l'utilisation de requests_html pour extraire du contenu JavaScript
requests_html rend notre vie plus facile. Voyons comment cela fonctionne en pratique. Supposons que nous avons une page qui génère certaines données via JavaScript.
from requests_html import HTMLSession
# Créer une session HTML
session = HTMLSession()
# Envoyer une requête à une page web
response = session.get('https://example-dynamic-page.com')
# Rendre le JavaScript
response.html.render()
# Extraire les données
data = response.html.find('#dynamic-content', first=True)
print(data.text)
C’est magique ! Contrairement à requests, requests_html nous fournit une méthode .render(), qui permet de "charger" la page et d’exécuter le JavaScript. Une fois que la page est "vivante", tu peux extraire toutes les données dont tu as besoin en utilisant les sélecteurs que nous avons étudiés avant.
3. Exemples d’extraction de données
Maintenant, approfondissons et examinons quelques exemples pour que tu voies comment requests_html nous sauve dans divers scénarios.
Extractions pratiques de données depuis des pages dynamiques
Imagine une page qui charge les dernières nouvelles seulement après un scroll. Avec requests_html, on peut simuler le comportement utilisateur.
url = 'https://example-news-site.com'
# Charger la page
response = session.get(url)
# Rendu avec un timeout allongé si besoin
response.html.render(timeout=20)
# Trouver les éléments des actualités
news_items = response.html.find('.news-item')
for item in news_items:
print(item.text)
Voilà, on accède facilement au contenu qui semblait insaisissable avant !
Manipuler le contenu JavaScript chargé avec requests_html
Avec requests_html et les sélecteurs CSS que nous avons vus dans les cours précédents, tu peux travailler avec le contenu des pages web comme si tu faisais du scraping depuis des années !
# Sélectionner le premier élément de l’en-tête de news
headline = response.html.find('.news-headline', first=True)
print(headline.text)
# Extraire un lien depuis un élément
link = headline.find('a', first=True).attrs['href']
print(link)
4. Conseils pratiques et astuces
Bien que requests_html soit un outil puissant, il y a quelques points à garder en tête lors de son utilisation :
- Timeouts et délais : N’oublie pas de configurer les timeouts de rendu pour les pages complexes. Cela te permettra d’éviter des erreurs dues à des chargements lents.
- Capacités de rendu :
requests_htmlpeut consommer beaucoup de ressources, car il rend le JavaScript. Pour de gros volumes de données ou des pages complexes, cela peut ralentir le processus. - CAPTCHA et protections anti-bot :
requests_htmlne contourne pas les protections anti-bot ou CAPTCHA, donc pour des cas plus complexes, mieux vaut utiliser Selenium.
GO TO FULL VERSION