BelleSoupe

Trouver des nœuds d'enfants avec une belle soupe

Trouver des nœuds d'enfants avec une belle soupe
La tâche de grattage Web est une tâche qui nécessite la compréhension de la façon dont les pages Web sont structurées. Pour obtenir les informations nécessaires à partir des pages Web, il faut comprendre la structure des pages Web, analyser les balises contenant les informations nécessaires, puis les attributs de ces balises.

Pour les débutants en web scraping avec BeautifulSoup, un article discutant des concepts de web scraping avec cette puissante bibliothèque peut être trouvé ici.

Cet article s'adresse aux programmeurs, analystes de données, scientifiques ou ingénieurs qui ont déjà les compétences nécessaires pour extraire du contenu de pages Web à l'aide de BeautifulSoup. Si vous n'avez aucune connaissance de cette bibliothèque, je vous conseille de passer par le tutoriel BeautifulSoup pour les débutants.

Maintenant, nous pouvons continuer - je veux croire que vous avez déjà installé cette bibliothèque.  Sinon, vous pouvez le faire en utilisant la commande ci-dessous :

pip installer BeautifulSoup4

Puisque nous travaillons avec l'extraction de données à partir de HTML, nous avons besoin d'une page HTML de base pour pratiquer ces concepts sur.  Pour cet article, nous utiliserions cet extrait HTML pour la pratique. Je vais attribuer l'extrait de code HTML suivant à une variable en utilisant les guillemets triples en Python.

sample_content = """

LinuxHint



Pour faire une liste non ordonnée, la balise ul est utilisée :
 




Pour faire une liste ordonnée, la balise ol est utilisée :
 


    Voici une liste ordonnée
  1. Numéro un

  2. Numéro deux



Astuce Linux, 2018



"""

Maintenant que nous avons réglé cela, passons directement à la bibliothèque BeautifulSoup.

Nous allons utiliser quelques méthodes et attributs que nous appellerions sur notre objet BeautifulSoup. Cependant, nous aurions besoin d'analyser notre chaîne à l'aide de BeautifulSoup, puis de l'affecter à une variable "our_soup".

de bs4 importer BeautifulSoup en tant que bso
our_soup = bso(sample_content, "lxml")

Désormais, nous travaillerions avec la variable "our_soup" et appellerions tous nos attributs ou méthodes dessus.

Sur une note rapide, si vous ne savez pas déjà ce qu'est un nœud enfant, il s'agit essentiellement d'un nœud (tag) qui existe à l'intérieur d'un autre nœud. Dans notre extrait HTML par exemple, les balises li sont des nœuds enfants des balises « ul » et « ol ».

Voici les méthodes que nous examinerions :

findChild() :

le trouverenfant méthode est utilisée pour trouver le premier nœud enfant des éléments HTML. Par exemple, lorsque nous examinons nos balises « ol » ou « ul », nous y trouverions deux balises enfants. Cependant, lorsque nous utilisons le trouverenfant méthode, elle ne renvoie que le premier nœud en tant que nœud enfant.

Cette méthode peut s'avérer très utile lorsque nous voulons obtenir uniquement le premier nœud enfant d'un élément HTML, car elle renvoie immédiatement le résultat requis.

L'objet retourné est du type bs4.élément.Étiqueter. Nous pouvons en extraire le texte en appelant l'attribut text dessus.

Voici un exemple :

first_child = notre_soupe.trouver("corps").trouver("ol")
print(first_child.findChild())

Le code ci-dessus renverrait ce qui suit :

  • Numéro un
  • Pour obtenir le texte de la balise, nous appelons le texte attribut dessus.

    Comme:

    print(first_child.findChild().texte)

    Pour obtenir le résultat suivant :

    'Numéro un'
    findChildren() :

    Nous avons jeté un œil au trouverenfant méthode et vu comment ça marche. le trouverEnfants La méthode fonctionne de manière similaire, mais comme son nom l'indique, elle ne trouve pas qu'un seul nœud enfant, elle obtient tous les nœuds enfants dans une balise.

    Lorsque vous avez besoin d'obtenir tous les nœuds enfants dans une balise, le trouverEnfants la méthode est la voie à suivre. Cette méthode renvoie tous les nœuds enfants d'une liste, vous pouvez accéder à la balise de votre choix en utilisant son numéro d'index.

    Voici un exemple :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(first_child.findChildren())

    Cela renverrait les nœuds enfants dans une liste :

    [
  • Numéro un
  • ,
  • Numéro deux
  • ]

    Pour obtenir le deuxième nœud enfant de la liste, le code suivant ferait l'affaire :

    print(first_child.findChildren()[1])

    Pour obtenir le résultat suivant :

  • Numéro deux
  • C'est tout ce que BeautifulSoup fournit en matière de méthodes. Cependant, cela ne s'arrête pas là. Les attributs peuvent également être appelés sur nos objets BeautifulSoup pour obtenir le nœud enfant/enfants/descendant d'un élément HTML.

    Contenu:

    Tandis que le trouverEnfants méthode a fait le travail simple d'extraction des nœuds enfants, le Contenu attributs fait quelque chose d'un peu différent.

    le Contenu L'attribut renvoie une liste de tout le contenu d'un élément HTML, y compris les nœuds enfants. Ainsi, lorsque vous appelez le Contenu attribut sur un objet BeautifulSoup, il renverrait le texte sous forme de chaînes et les nœuds dans les balises sous forme de bs4.élément.Étiqueter objet.

    Voici un exemple :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(first_child.Contenu)

    Cela renvoie les éléments suivants :

    ["\n   Voici une liste ordonnée\n   ",
  • Numéro un
  • ,
    '\n',
  • Numéro deux
  • , '\n']

    Comme vous pouvez le voir, la liste contient le texte qui vient avant un nœud enfant, le nœud enfant et le texte qui vient après le nœud enfant.

    Pour accéder au deuxième nœud enfant, il suffit d'utiliser son numéro d'index comme indiqué ci-dessous :

    print(first_child.contenu[3])

    Cela renverrait ce qui suit :

  • Numéro deux
  • enfants:

    Voici un attribut qui fait presque la même chose que l'attribut contents. Cependant, il a une petite différence qui pourrait avoir un impact énorme (pour ceux qui prennent l'optimisation du code au sérieux).

    L'attribut children renvoie également le texte qui vient avant un nœud enfant, le nœud enfant lui-même et le texte qui vient après le nœud enfant. La différence ici est qu'il les renvoie en tant que générateur au lieu d'une liste.

    Regardons l'exemple suivant :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(first_child.enfants)

    Le code ci-dessus donne les résultats suivants (l'adresse sur votre machine ne doit pas correspondre à celle ci-dessous) :

    Comme vous pouvez le voir, il ne renvoie que l'adresse du générateur. On pourrait convertir ce générateur en liste.

    Nous pouvons le voir dans l'exemple ci-dessous :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(list(first_child.enfants))

    Cela donne le résultat suivant :

    ["\n        Voici une liste ordonnée\n        ",
  • Numéro un
  • ,
    '\n',
  • Numéro deux
  • , '\n']

    descendance:

    Tandis que le enfants l'attribut fonctionne sur l'obtention uniquement du contenu à l'intérieur d'une balise i.e. le texte, et les nœuds au premier niveau, le descendance l'attribut va plus loin et fait plus.

    le descendance l'attribut obtient tout le texte et les nœuds qui existent dans les nœuds enfants. Donc, il ne renvoie pas uniquement les nœuds enfants, il renvoie également les nœuds petits-enfants.

    En plus de renvoyer le texte et les balises, il renvoie également le contenu des balises sous forme de chaînes.

    Tout comme le enfants attribut, descendance renvoie ses résultats en tant que générateur.

    Nous pouvons le voir ci-dessous :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(first_child.descendance)

    Cela donne le résultat suivant :

    Comme vu précédemment, nous pouvons alors convertir cet objet générateur en une liste :

    first_child = notre_soupe.trouver("corps").trouver("ol")
    print(list(first_child.descendance))

    Nous obtiendrions la liste ci-dessous :

    ["\n   Voici une liste ordonnée\n   ",
  • Numéro un
  • ,
    'Numéro un', '\n',
  • Numéro deux
  • , 'Numéro deux', '\n']

    Conclusion

    Voilà, cinq façons différentes d'accéder aux nœuds enfants dans les éléments HTML. Il pourrait y avoir plus de moyens, mais avec les méthodes et les attributs discutés dans cet article, on devrait pouvoir accéder au nœud enfant de n'importe quel élément HTML.

    Comment afficher le compteur FPS dans les jeux Linux
    Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...
    Comment télécharger et jouer à Civilization VI de Sid Meier sur Linux
    Présentation du jeu Civilization 6 est une version moderne du concept classique introduit dans la série de jeux Age of Empires. L'idée était assez sim...
    Comment installer et jouer à Doom sur Linux
    Introduction à Doom La série Doom est née dans les années 90 après la sortie du Doom original. Ce fut un succès instantané et à partir de ce moment-là...