Analyser le contenu d'une page avec BeautifulSoup
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va voir comment installer et utiliser Beautiful Soup pour analyser etnaviguer à l'intérieur de notre HTML qu'on a récupéré grâce à la Bibliothèque Request.
00:00:11 :Donc la première chose qu'on va faire c'est installer Beautiful Soup. Pour ça,j'utilise là encore PIP et il faut bien mettre la version 4 ici. Il y avait la version 3 qui
00:00:20 :est une version assez vieille qui fonctionnait avec Python 2. La dernière version en date c'estla version 4. Donc n'oubliez pas de le spécifier quand vous faites PIP install tout en minuscule
00:00:29 :ici Beautiful Soup 4. Vous appuyez sur entrée pour valider. Là encore ça va être assez rapideet on va pouvoir l'utiliser en l'important. Donc le nom du package c'est bs4. Donc on va
00:00:39 :faire from bs4 et on va importer la classe Beautiful Soup qui va nous permettre de créerun objet Beautiful Soup qu'on va appeler généralement soup. Vous allez voir ça très
00:00:49 :souvent revenir dans les scripts. Donc ça c'est juste une variable qu'on va créer. On pourraitl'appeler n'importe comment. Dans notre cas, on va l'appeler soup parce que c'est ça qu'on
00:00:56 :va revenir très souvent. Et cette variable, on va la créer à partir de Beautiful Soup. Et cetobjet Beautiful Soup, donc cette classe, on va créer une instance à partir de cette classe.
00:01:05 :On va lui passer le HTML. Donc je pourrais tout simplement lui passer du HTML ici comme ça queje ferai dans une chaîne de caractère. Ça n'a pas beaucoup d'intérêt. Nous ce qu'on va vouloir
00:01:14 :faire c'est récupérer le HTML à partir d'une URL. Et en guise d'exemple, on va utiliser un site bienconnu des étudiants en scrapping de données qui s'appelle books.toscrape.com qui est un site
00:01:26 :d'exemple avec plein de données fictives qui a l'avantage d'être assez simple et qui permetde comprendre les fondamentaux du scrapping de données, donc pour récupérer et analyser lesdonnées. Donc on va copier cette URL ici, books.toscrape.com. On va revenir dans notre
00:01:42 :script ici. On va mettre cette URL dans une variable URL et on va ensuite faire une requête avec lemodule request que j'ai importé au-dessus. Une requête GET tout simplement vers cette URL. On
00:01:54 :récupère tout ça dans un objet response et on va passer le texte de cette réponse, donc response.texteà notre objet beautifulsoup. On va pouvoir ensuite spécifier à la suite le parser qu'on souhaite
00:02:06 :utiliser. Donc le parser c'est en fait la méthode d'analyse de notre fichier. Il faut savoir quebeautifulsoup dispose de trois parsers qui permettent d'analyser différemment les documents.
00:02:16 :Le premier parser c'est un parser qui s'appelle lxml-xml. Donc comme son nom l'indique c'est unparser qui permet d'analyser les fichiers xml. Alors xml c'est un langage de balisage qui est
00:02:28 :générique, qui est encore plus générique que le html. Les deux se ressemblent beaucoup. Donc c'estun langage qui de la même façon que html est basé sur des balises, donc les fameuses balises qu'ona par exemple avec le body etc. Sauf que en xml on va pouvoir utiliser pas mal n'importe quoi. En
00:02:43 :fait c'est nous qui définissons les balises. Donc on pourra mettre par exemple template ici oupatrick, le fameux patrick. Et le html si vous voulez c'est une version du xml qui est un peu
00:02:53 :plus cadré avec des balises très classiques qu'on connaît tous comme le body, le h1, le p etc. Doncc'est des balises qui sont définies par le langage. Le xml c'est plutôt utilisé pour échanger des
00:03:04 :données entre différents systèmes, pour stocker des données, pour faire des fichiers de configurationetc. Donc ça c'est le premier parser qui est disponible qu'on peut utiliser donc aussi avec
00:03:13 :beautiful soup si jamais vous voulez analyser ces types de fichiers. Les deux autres parseurs quiexistent ce sont spécifiquement des parseurs pour analyser du html. Donc on a l'analyseur html.parseur
00:03:25 :qui est un analyseur intégré à python qui va utiliser la bibliothèque html parseur. Il estplus rapide que le deuxième qu'on va voir parce qu'il écrit en c mais il est un peu moins tolérantaux erreurs qu'on peut avoir dans du formatage html. Donc ça fonctionne très bien si vous avez
00:03:40 :un document qui est très très bien formaté mais si vous avez des erreurs par exemple des balisesqui sont mal fermées ou des choses du genre et bien ça va moins fonctionner que l'autreparser qui est html5lib comme ceci qui est donc une bibliothèque externe qui est écrit en python
00:03:57 :donc c'est un petit peu plus lent que le c mais il est un peu plus tolérant aux erreurs deformatage. Donc si vous savez que vous allez avoir un document html qui n'est pas forcément très
00:04:07 :bien structuré vous pouvez préférer ce parseur. Personnellement je préfère toujours commencer parle html.parseur puisqu'il est plus rapide et si jamais je vois que j'ai des problèmes et qu'il
00:04:16 :y a un fichier html un peu plus complexe je peux passer sur l'autre. Si jamais vous ne vous souvenezpas des différents parseurs qui sont disponibles vous pouvez faire un ctrl b ou commande b sur macos ou faire un clic droit sur la classe beautiful soup aller dans goto et declaration or usage et
00:04:32 :là ça va vous ramener donc dans la classe tout simplement beautiful soup ici à l'intérieur dumodule et vous allez retrouver ici dans le param features ici les différents parseurs qui sontdisponibles. Donc on retrouve les trois ici en fait il y en a quatre pour le lxml on a lxml ici
00:04:47 :et lxml-xml et ensuite on a htmlparseur et html5lib. Donc voilà si jamais vous ne vous ensouvenez plus un moyen rapide de les retrouver. Et donc une fois qu'on a créé cette instance on va
00:04:59 :pouvoir l'afficher donc je vais faire un print et on a une méthode bien pratique qui s'appelleprettify qui nous permet d'afficher ce html sous une façon un peu plus facile à lire donc je vaisexécuter le script pour vous montrer et là vous voyez qu'on a vraiment une page qui ressemble
00:05:13 :100% à du html avec prettify qui va nous permettre de garder les indentations les retours à leslignes etc. Si j'enlève le prettify vous allez voir que c'est un petit peu moins digeste on va
00:05:24 :avoir des choses qui sont un petit peu moins bien mises vous voyez là il n'y a pas forcément desindentations ici on a tout qui est sur la même ligne donc c'est un petit peu plus difficileà lire qu'avec le prettify. Si je vous le refais vous allez voir qu'à la fin avec les articles
00:05:37 :ici vous voyez il y a beaucoup plus d'indentations donc c'est un peu plus facile à lire en généralavec prettify. Et le prettify vous pouvez le faire à n'importe quel endroit sur différentes nodes
00:05:45 :qui vont vous être retournés par Beautiful Soup. Donc quand je parle de nodes en fait ça va êtreles différents objets qui vont constituer notre html. Je vous ai fait un petit exemple ici pour
00:05:56 :vous montrer avec une fonction récursive comment on peut facilement traverser le DOM. Donc jevous met tout ça dans les sources on a donc cette fonction qui va nous permettre de parcourirrécursivement l'arbre document object model. On va à chaque fois récupérer le nom de l'élément
00:06:11 :s'il existe puisque vous allez voir que des fois il y a des éléments comme des retours à la ligneou des tabulations justement qui n'ont pas de nom donc ça va être des éléments qui vont pas êtretrès utiles pour nous. Nous ce qu'on veut c'est juste récupérer les éléments comme le body, le h1,
00:06:24 :les paragraphes, les images etc. Et donc si on a un name sur l'élément on va l'afficher et ensuitesi on a un attribut children sur l'élément donc c'est à dire que si l'élément contient des enfantson va passer à travers chaque enfant de element.children donc on va passer sur chaque enfant
00:06:40 :et réappeler cette fonction traverse DOM donc c'est là le paramètre de récursivité et on vaincrémenter le niveau. Et ça en fait qu'est ce que ça va faire ? Ça va tout simplement nous
00:06:49 :afficher de nouveau toute la structure de la page html donc si je lance le script vous allez voirqu'on a quasiment la même chose que ce qu'on avait précédemment avec le prettify sauf que là on ajuste le nom des balises donc on n'a pas le texte, on n'a pas les attributs, juste le nom des balises
00:07:03 :et vous voyez de cette façon avec cette fonction récursive qu'on est bien ici en présence d'objetspythons avec des attributs et qu'on a bien donc ce document qui est analysé par Beautiful Soupet qui nous permet de naviguer à l'intérieur de la structure html. Donc c'est pour ça que
00:07:18 :Beautiful Soup est très très apprécié des développeurs qui font du scrapping parce queça va vraiment nous permettre de naviguer à l'intérieur de cette structure facilement. Là
00:07:27 :je vous ai montré juste un petit aperçu de ce qu'on peut faire mais on va voir dans les prochainesparties comment on peut facilement récupérer des éléments en les ciblant grâce notamment aux classesou au nom des balises pour récupérer par exemple toutes les images ou tous les titres d'une page
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.