Avertissement : En fonction du site, le webscraping peut amener à ne pas respecter les conditions d’utilisation de celui-ci.
Afin de constituer une base d’apprentissage pour un modèle de machine learning, quoi de mieux que le webscraping lorsqu’il n’existe aucune base déjà constituée pour notre problématique ? Parfois c’est relativement simple, parfois nous pouvons rencontrer quelques difficultés comme le lazy loading.
Le lazy loading est une pratique permettant de différer le chargement des ressources statiques (principalement images et vidéos), qui ne sont visibles à l’internaute qu’après scroll de sa part.
En suivant les tutoriaux de base sur le webscraping, nous n’aurons pas accès à la majorité des éléments (soit rien du tout, soit potentiellement un placeholder pour les images), n’ayant eu aucun scroll lors de notre requête GET. C’est encore pire si le site utilise un scrolling infini.
Ce tutorial a pour but de montrer comment contourner cette problématique en Python.
Note: Ceci ne sert qu’à des fins d’apprentissage seulement.
#1 Packages utilisés
Selenium
Simulera un navigateur et toutes ses interactions (indispensable dans notre cas).
Note : Il sera nécessaire d’installer un webdriver pour que Selenium fonctionne dans notre cas. Voici le lien pour installer le webdriver de Chrome :http://chromedriver.chromium.org/downloads
BeautifulSoup
Parsera le HTML que nous aurons récupéré.
#2 Website avec Lazy Loading
Pour ce tutorial, ne pouvant vous donner quelques sites qui utilisent ce principe… je vous ai créé un exemple de site à l’adresse suivante:
Pour le code source de ce site, vous pourrez le trouver :
En regardant les éléments HTML sur ce site via les outils développeurs du navigateur, vous remarquerez que les <div> apparaissent au fur et à mesure du scroll.
#3 Code
Entrons dans le vif du sujet et importons les librairies comme il se doit.
Passons directement à la partie la plus intéressante, créons notre fonction qui récupèrera l’intégralité de la page, après que les images aient été chargées.
Notre fonction est prête à récupérer l’intégralité de la page avec les éléments que nous voulons extraire. Il ne nous reste plus qu’à parser nos pages pour récupérer nos éléments.
Résultat sans Selenium
Nous n’avons rien du tout. Sans navigateur, le lazy-loading n’aurait chargé aucun des éléments.
Résultat avec Selenium
Nos print affichent les 30 titres présents sur la page de démo.
Rédigé par Nicolas Risi, Consultant Data Driven Business