Tutoriel Python BeautifulSoup pour les débutants

Tutoriel Python BeautifulSoup pour les débutants
Le grattage sur le Web est d'une grande importance dans le monde d'aujourd'hui. Tout le monde a besoin de données, à partir de différentes sources, y compris des pages Web. Dans cet article, nous examinerons comment analyser HTML avec la bibliothèque BeautifulSoup. Extraire les données nécessaires dans un tas d'alphabets et de symboles, grâce à cette grande bibliothèque, est devenu beaucoup plus facile. BeautifulSoup écrit en python peut facilement être installé sur votre machine à l'aide de l'outil d'installation PIP de Python. La commande suivante aiderait à installer la bibliothèque:
pip install BeautifulSoup4

Pour vérifier si l'installation a réussi, activez le shell interactif Python et importez BeautifulSoup. Si aucune erreur n'apparaît, cela signifie que tout s'est bien passé. Si vous ne savez pas comment procéder à ce sujet, saisissez les commandes suivantes dans votre terminal.

$ python
Python 3.5.2 (par défaut, 14 septembre 2017, 22:51:06)
[GCC 5.4.0 20160609] sur Linux
Tapez "Help", "Copyright", "Crédits" ou "Licence" pour plus d'informations.
>>> Importer BS4

Pour travailler avec la bibliothèque BeautifulSoup, vous devez passer en html. Lorsque vous travaillez avec de vrais sites Web, vous pouvez obtenir le HTML d'une page Web à l'aide de la bibliothèque Demandes. L'installation et l'utilisation de la bibliothèque des demandes dépassent le cadre de cet article, mais vous pouvez trouver votre chemin autour de la documentation qu'il est assez facile à utiliser. Pour cet article, nous allons simplement utiliser HTML dans une chaîne Python que nous appellerions html.

html = "" "

Profil d'employé



Nom:Dr Peter Parker
Emploi:Ingénieur d'apprentissage automatique
Téléphone:+12345678910
E-mail:
Peteparker @ svalley.com

Site Internet:
pparkerworks.com



"" "

Pour utiliser BeautifulSoup, nous l'importons dans le code en utilisant le code ci-dessous:

De BS4 Import BeautifulSoup

Cela présenterait BeautifulSoup dans notre espace de noms et nous pouvons pouvoir l'utiliser pour analyser notre chaîne.

Soup = BeautifulSoup (HTML, "LXML")

Maintenant, soupe est un beau objet de type BS4.BeautifulSoup et nous pouvons pouvoir effectuer toutes les opérations de BeautifulSoup sur le soupevariable.

Jetons un coup d'œil à certaines choses que nous pouvons faire avec BeautifulSoup maintenant.

Rendre le laid, beau

Lorsque BeautifulSoup analyse 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 pourrez imprimer le soupe:

Cependant, il y a une solution à cela. La solution donne au HTML l'espacement parfait, ce qui rend les choses belles. Cette solution est à juste titre appelée «enjoliver".

Certes, vous ne pouvez pas utiliser cette fonctionnalité la plupart du temps; Cependant, il y a des moments où vous n'avez peut-être pas accès à l'outil d'inspecter l'élément 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 aurait l'air correctement espacé, tout 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.BelSoup. Le résultat est maintenant de type «Unicode». Cela signifie que vous ne pouvez pas y appliquer d'autres méthodes de groupe, mais la soupe elle-même n'est pas affectée, nous sommes donc en sécurité.

Trouver nos balises préférées

HTML est composé de balises. Il stocke toutes ses données, et au milieu de tout ce fouillis se trouve 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 trouvons-nous les bonnes balises? Nous utilisons les méthodes de recherche et de recherche de BeautifulSoup.

Voici comment ils fonctionnent:

Le trouver La méthode recherche la première balise avec le nom nécessaire et renvoie un objet de type BS4.élément.Étiqueter.

Le Trouver tout Méthode En revanche, recherche toutes les balises avec le nom de balise nécessaire et les renvoie comme une liste de type BS4.élément.Résultat. Tous les éléments de la liste sont de type BS4.élément.Tag, nous pouvons donc effectuer l'indexation sur la liste et continuer notre exploration de BeautifulSoup.

Voyons un code. Faisons toutes les tags div:

soupe.trouver («div»)

Nous obtiendrions le résultat suivant:

Nom:Dr Peter Parker

Vérification de la variable HTML, vous remarqueriez qu'il s'agit de la première balise div.

soupe.find_all ("div")

Nous obtiendrions le résultat suivant:

[
Nom:Dr Peter Parker,
Emploi:Ingénieur d'apprentissage automatique,
Téléphone:+12345678910,
E-mail:
Peteparker @ svalley.com
,
Site Internet:
pparkerworks.com
]]

Il renvoie une liste. Si, par exemple, vous souhaitez la troisième balise DIV, vous exécutez le code suivant:

soupe.find_all («div») [2]

Il renverrait ce qui suit:

Téléphone:+12345678910

Trouver les attributs de nos balises préférées

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 lié à l'hyperlien dans les pages Web, avec les liens de 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 attribution. Cela renverrait un dictionnaire de l'attribut et sa valeur.

Pour obtenir l'attribut e-mail par exemple, nous obtenons les balises qui entourent les informations nécessaires et effectuons ce qui suit.

soupe.find_all («a») [0].attribution

Qui renverrait le résultat suivant:

'Href': 'Mailto: Peteparker @ Svalley.com '

Même chose pour l'attribut de site Web.

soupe.find_all («a») [1].attribution

Qui renverrait le résultat suivant:

'href': 'http: // pparkerworks.com '

Les valeurs renvoyées sont les dictionnaires et la syntaxe du dictionnaire normal peut être appliquée pour obtenir les clés et les valeurs.

Voyons le parent et les enfants

Il y a des balises partout. Parfois, nous voulons savoir ce que sont les étiquettes pour enfants et quelle est la balise parent.

Si vous ne savez pas déjà ce qu'est un parent et une étiquette d'enfant, cette brève explication devrait suffire: une balise parent est la balise extérieure immédiate et un enfant est l'étiquette intérieure immédiate de la balise en question.

En jetant un œil à notre HTML, la balise corporelle est l'étiquette parent de toutes les balises div. De plus, l'étiquette audacieuse et la balise d'ancrage sont les enfants des étiquettes div, le cas échéant, car toutes les balises div ne possèdent pas des balises d'ancrage.

Afin que nous puissions accéder à la balise parent en appelant le frémit-parent méthode.

soupe.trouver ("div").findparent ()

Cela rendrait l'ensemble de l'étiquette corporelle:


Nom:Dr Peter Parker
Emploi:Ingénieur d'apprentissage automatique
Téléphone:+12345678910
E-mail:
Peteparker @ svalley.com

Site Internet:
pparkerworks.com

Pour obtenir l'étiquette des enfants de la quatrième étiquette Div, nous appelons le findchildren méthode:

soupe.find_all ("div") [4].Findchildren ()

Il renvoie ce qui suit:

[Site Internet:, pparkerworks.com]]

Qu'y a-t-il pour nous?

Lors de la navigation sur les pages Web, nous ne voyons pas de balises partout à l'écran. Tout ce que nous voyons est le contenu des différentes balises. Et si nous voulons le contenu d'une balise, sans tous les supports angulaires qui me rendent la vie inconfortable? Ce n'est pas difficile, tout ce que nous ferions, c'est d'appeler get_text Méthode sur l'étiquette 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 corporelle:

Nom: Dr Peter Parker
Emploi: ingénieur d'apprentissage automatique
Téléphone: +12345678910
Courriel: Peteparker @ svalley.com
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 ou utiliser dir (bealfulSoup) sur la coque interactive pour voir la liste des opérations qui peuvent être effectuées sur un objet BeautifulSoup. C'est tout de moi aujourd'hui, jusqu'à ce que j'écrive à nouveau.