pip installer BeautifulSoup4
Pour vérifier si l'installation a réussi, activez le shell interactif Python et importez BeautifulSoup. Si aucune erreur ne s'affiche, cela signifie que tout s'est bien passé. Si vous ne savez pas comment vous y prendre, tapez les commandes suivantes dans votre terminal.
$ pythonPython 3.5.2 (par défaut, 14 sept. 2017, 22:51:06)
[CCG 5.4.0 20160609] sur Linux
Tapez "aide", "droit d'auteur", "crédits" ou "licence" pour plus d'informations.
>>> importer bs4
Pour travailler avec la librairie BeautifulSoup, il faut passer en html. Lorsque vous travaillez avec de vrais sites Web, vous pouvez obtenir le code html d'une page Web à l'aide de la bibliothèque de requêtes. L'installation et l'utilisation de la bibliothèque de requêtes dépassent le cadre de cet article, mais vous pouvez vous y retrouver dans la documentation, c'est assez facile à utiliser. Pour cet article, nous allons simplement utiliser html dans une chaîne python que nous appellerions html.
html = """[email protégé]
pparkerworks.com
"""
Pour utiliser beautifulsoup, nous l'importons dans le code en utilisant le code ci-dessous :
de l'importation bs4 BeautifulSoupCela introduirait BeautifulSoup dans notre espace de noms et nous pouvons l'utiliser pour analyser notre chaîne.
soupe = BelleSoupe(html, "lxml")À présent, soupe est un objet BeautifulSoup de type bs4.BeautifulSoup et nous pouvons effectuer toutes les opérations BeautifulSoup sur le soupevariable.
Jetons un coup d'œil à certaines choses que nous pouvons faire avec BeautifulSoup maintenant.
RENDRE LE LIGEUR, LE BEAU
Lorsque BeautifulSoup analyse du HTML, ce n'est généralement pas dans le meilleur des formats. L'espacement est assez horrible. Les balises sont difficiles à trouver. Voici une image pour montrer à quoi ils ressembleraient lorsque vous imprimeriez le soupe:
Cependant, il existe une solution à ce. La solution donne au code HTML l'espacement parfait, ce qui rend les choses belles. Cette solution s'appelle à juste titre «enjoliver".
Certes, vous ne pourrez peut-être pas utiliser cette fonctionnalité la plupart du temps; Cependant, il peut arriver que vous n'ayez pas accès à l'outil d'inspection des éléments d'un navigateur Web. En ces temps de ressources limitées, vous trouverez la méthode prettify très utile.
Voici comment vous l'utilisez :
soupe.enjoliver()Le balisage semblerait correctement espacé, comme dans l'image ci-dessous :
Lorsque vous appliquez la méthode prettify sur la soupe, le résultat n'est plus un type bs4.BelleSoupe. Le résultat est maintenant de type 'unicode'. Cela signifie que vous ne pouvez pas appliquer d'autres méthodes BeautifulSoup dessus, mais la soupe elle-même n'est pas affectée, nous sommes donc en sécurité.
TROUVER NOS ÉTIQUETTES PRÉFÉRÉES
HTML est composé de balises. Il y stocke toutes ses données, et au milieu de tout ce fouillis se trouvent les données dont nous avons besoin. Fondamentalement, cela signifie que lorsque nous trouvons les bonnes balises, nous pouvons obtenir ce dont nous avons besoin.
Alors comment trouver les bons tags? Nous utilisons les méthodes find et find_all de BeautifulSoup.
Voici comment ils fonctionnent :
le trouve la méthode recherche la première balise avec le nom requis et renvoie un objet de type bs4.élément.Étiqueter.
le Trouver tout d'autre part, recherche toutes les balises avec le nom de balise nécessaire et les renvoie sous forme de liste de type bs4.élément.Ensemble de résultats. Tous les éléments de la liste sont de type bs4.élément.Tag, pour que nous puissions faire l'indexation sur la liste et continuer notre exploration de la belle soupe.
Voyons un peu de code. Trouvons toutes les balises div :
soupe.trouver ("div")On obtiendrait le résultat suivant :
En vérifiant la variable html, vous remarquerez qu'il s'agit de la première balise div.
soupe.find_all ("div")On obtiendrait le résultat suivant :
[[email protégé]
pparkerworks.com
Il renvoie une liste. Si par exemple vous voulez la troisième balise div, vous exécutez le code suivant :
soupe.find_all ("div")[2]Il renverrait ce qui suit :
RETROUVER LES ATTRIBUTS DE NOS TAGS FAVORIS
Maintenant que nous avons vu comment obtenir nos balises préférées, que diriez-vous d'obtenir leurs attributs?
Vous pensez peut-être à ce stade : « De quoi avons-nous besoin d'attributs pour?". Eh bien, souvent, la plupart des données dont nous avons besoin seront des adresses e-mail et des sites Web. Ce type de données est généralement hyperlié dans les pages Web, avec les liens dans l'attribut "href".
Lorsque nous avons extrait la balise nécessaire, en utilisant les méthodes find ou find_all, nous pouvons obtenir des attributs en appliquant atouts. Cela renverrait un dictionnaire de l'attribut et sa valeur.
Pour obtenir l'attribut email par exemple, on obtient le balises qui entourent les informations nécessaires et procédez comme suit.
soupe.find_all ("un")[0].atoutsCe qui retournerait le résultat suivant :
'href': 'mailto:[email protected]'Même chose pour l'attribut website.
soupe.find_all ("un")[1].atoutsCe qui retournerait le résultat suivant :
'href': 'http://pparkerworks.com'Les valeurs renvoyées sont des dictionnaires et la syntaxe normale du dictionnaire peut être appliquée pour obtenir les clés et les valeurs.
VOIR LE PARENT ET LES ENFANTS
Il y a des balises partout. Parfois, nous voulons savoir ce que sont les balises enfants et quelle est la balise parent.
Si vous ne savez pas déjà ce qu'est une balise parent et enfant, cette brève explication devrait suffire : une balise parent est la balise externe immédiate et un enfant est la balise interne immédiate de la balise en question.
En regardant notre html, la balise body est la balise parent de toutes les balises div. De plus, la balise bold et la balise d'ancrage sont les enfants des balises div, le cas échéant, car toutes les balises div ne possèdent pas de balises d'ancrage.
Nous pouvons donc accéder à la balise parent en appelant le trouverParent méthode.
soupe.trouver("div").findParent()Cela renverrait l'intégralité de la balise body :
[email protégé]
pparkerworks.com
Pour obtenir la balise children de la quatrième balise div, nous appelons la trouverEnfants méthode:
soupe.find_all("div")[4].trouverEnfants()Il renvoie les éléments suivants :
[Site Internet:, pparkerworks.com]QU'EST-CE QUE C'EST POUR NOUS?
Lors de la navigation sur les pages Web, nous ne voyons pas de balises partout sur l'écran. On ne voit que le contenu des différentes balises. Et si on voulait le contenu d'un tag, sans que tous les crochets angulaires rendent la vie inconfortable? Ce n'est pas difficile, tout ce que nous ferions est d'appeler get_text méthode sur la balise de choix et nous obtenons le texte dans la balise et si la balise contient d'autres balises, elle obtient également leurs valeurs de texte.
Voici un exemple :
soupe.trouver("corps").get_text()Cela renvoie toutes les valeurs de texte dans la balise body :
Nom : Dr Peter ParkerPoste : ingénieur en apprentissage automatique
Téléphone : +1 234 56 78 910
Courriel :[e-mail protégé]
Site Web : pparkerworks.com
CONCLUSION
C'est ce que nous avons pour cet article. Cependant, il y a encore d'autres choses intéressantes qui peuvent être faites avec beautifulsoup. Vous pouvez soit consulter la documentation, soit utiliser dir(Belle Soupe) sur le shell interactif pour voir la liste des opérations réalisables sur un objet BeautifulSoup. C'est tout pour moi aujourd'hui, jusqu'à ce que j'écrive à nouveau.