Pour les débutants en grattage Web avec BeautifulSoup, un article discutant des concepts de grattage Web avec cette bibliothèque puissante peut être trouvée ici.
Cet article concerne les programmeurs, les analystes de données, les scientifiques ou les ingénieurs qui ont déjà des compétences d'extraction de contenu à partir 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 install BeautifulSoup4Puisque nous travaillons avec l'extraction de données de HTML, nous devons avoir une page HTML de base pour pratiquer ces concepts. Pour cet article, nous utiliserions cet extrait HTML pour la pratique. Je vais attribuer l'extrait HTML suivant à une variable en utilisant les citations triples dans Python.
samptample_content = "" "
Pour faire une liste non ordonnée, la balise UL est utilisée:
Pour faire une liste commandée, la balise OL est utilisée:
Indice de Linux, 2018
Maintenant que nous avons trié cela, passons à travailler avec la bibliothèque BeautifulSoup.
Nous allons utiliser quelques méthodes et attributs que nous appellerions notre objet BeautifulSoup. Cependant, nous aurions besoin d'analyser notre chaîne en utilisant BeautifulSoup, puis d'attribuer une variable «Our_Soup».
De BS4 Import BeautifulSoup comme BSODésormais, nous travaillerions avec la variable «our_soup» et appellerions tous nos attributs ou méthodes.
Sur une note rapide, si vous ne savez pas déjà ce qu'est un nœud enfant, c'est essentiellement un nœud (balise) qui existe à l'intérieur d'un autre nœud. Dans notre extrait HTML par exemple, les étiquettes Li sont des nœuds pour enfants à la fois les balises «UL» et «OL».
Voici les méthodes que nous allions jeter un œil:
findchild ():
Le finir La méthode est utilisée pour trouver le premier nœud enfant des éléments HTML. Par exemple, lorsque nous jetons un œil à nos balises «OL» ou «UL», nous y trouvons deux étiquettes d'enfants. Cependant, lorsque nous utilisons le finir Méthode, il renvoie uniquement le premier nœud en tant que nœud enfant.
Cette méthode pourrait s'avérer très utile lorsque nous voulons obtenir uniquement le premier nœud enfant d'un élément HTML, car il renvoie le résultat requis tout de suite.
L'objet retourné est du type BS4.élément.Étiqueter. Nous pouvons en extraire le texte en appelant l'attribut de texte dessus.
Voici un exemple:
first_child = our_soup.trouver ("corps").trouver ("ol")Le code ci-dessus renverrait ce qui suit:
Pour obtenir le texte de la balise, nous appelons le texte attribut dessus.
Comme:
Imprimer (First_child.findchild ().texte)Pour obtenir le résultat suivant:
'Numéro un'Nous avons jeté un coup d'œil au finir Méthode et vu comment ça marche. Le findchildren La méthode fonctionne de manière similaire, cependant, comme le nom l'indique, il ne trouve pas un seul nœud enfant, il obtient tous les nœuds d'enfants dans une balise.
Lorsque vous avez besoin d'obtenir tous les nœuds d'enfants dans une balise, le findchildren La méthode est la voie à suivre. Cette méthode renvoie tous les nœuds d'enfants dans une liste, vous pouvez accéder à l'étiquette de votre choix en utilisant son numéro d'index.
Voici un exemple:
first_child = our_soup.trouver ("corps").trouver ("ol")Cela rendrait les nœuds des enfants dans une liste:
[Pour obtenir le deuxième nœud enfant dans la liste, le code suivant ferait le travail:
Imprimer (First_child.findchildren () [1])Pour obtenir le résultat suivant:
C'est tout ce que BeautifulSoup est fourni en ce qui concerne les méthodes. Cependant, ça ne s'arrête pas là. Les attributs peuvent également être appelés sur nos objets BeautifulSoup pour obtenir le nœud enfant / enfant / descendant d'un élément HTML.
Contenu:
Tandis que le findchildren La méthode a fait le travail simple d'extraction des nœuds pour enfants, le Contenu Les attributs font 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 pour enfants. Alors quand tu appelles le Contenu Attribut sur un objet BeautifulSoup, il renverrait le texte sous forme de cordes et les nœuds dans les balises en tant que BS4.élément.Étiqueter objet.
Voici un exemple:
first_child = our_soup.trouver ("corps").trouver ("ol")Cela renvoie ce qui suit:
["\ n Voici une liste ordonnée \ n",Comme vous pouvez le voir, la liste contient le texte qui précède 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, tout ce que nous devons faire est d'utiliser son numéro d'index comme indiqué ci-dessous:
Imprimer (First_child.Contenu [3])Cela retournerait ce qui suit:
enfants:
Voici un attribut qui fait presque la même chose que l'attribut de contenu. 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 des enfants renvoie également le texte qui précède 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'elle les renvoie en tant que générateur au lieu d'une liste.
Jetons un coup d'œil à l'exemple suivant:
first_child = our_soup.trouver ("corps").trouver ("ol")Le code ci-dessus donne les résultats suivants (l'adresse sur votre machine n'a pas à compter avec celle ci-dessous):
Comme vous pouvez le voir, il ne renvoie que l'adresse du générateur. Nous pourrions convertir ce générateur en une liste.
Nous pouvons le voir dans l'exemple ci-dessous:
first_child = our_soup.trouver ("corps").trouver ("ol")Cela donne le résultat suivant:
["\ n Voici une liste ordonnée \ n",descendance:
Tandis que le enfants L'attribut fonctionne sur l'obtention du contenu dans 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 d'enfants. Donc il ne retourne pas uniquement les nœuds d'enfants, il renvoie également les nœuds de petits-enfants.
Comme le renvoyait le texte et les balises, il renvoie également le contenu dans les 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 = our_soup.trouver ("corps").trouver ("ol")Cela donne le résultat suivant:
Comme vu précédemment, nous pouvons ensuite convertir cet objet générateur en une liste:
first_child = our_soup.trouver ("corps").trouver ("ol")Nous obtiendrions la liste ci-dessous:
["\ n Voici une liste ordonnée \ n",Conclusion
Là, vous l'avez, cinq façons différentes d'accéder aux nœuds d'enfants dans les éléments HTML. Il pourrait y avoir plus de façons, cependant, avec les méthodes et les attributs discutés dans cet article, il faut être en mesure d'accéder au nœud enfant de n'importe quel élément HTML.