Belle soupe - beaux objets

Le point de départ de tout projet BeautifulSoup est l'objet BeautifulSoup. Un objet BeautifulSoup représente le document HTML / XML d'entrée utilisé pour sa création.

Nous pouvons passer une chaîne ou un objet semblable à un fichier pour Beautiful Soup, où les fichiers (objets) sont soit stockés localement dans notre machine, soit sur une page Web.

Les objets BeautifulSoup les plus courants sont -

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Comparaison d'objets pour l'égalité

Selon la belle soupe, deux objets de chaîne ou de balise navigables sont égaux s'ils représentent le même balisage HTML / XML.

Voyons maintenant l'exemple ci-dessous, où les deux balises <b> sont traitées comme égales, même si elles vivent dans des parties différentes de l'arborescence d'objets, car elles ressemblent toutes les deux à «<b> Java </b>».

>>> markup = "<p>Learn Python and <b>Java</b> and advanced <b>Java</b>! from Tutorialspoint</p>"
>>> soup = BeautifulSoup(markup, "html.parser")
>>> first_b, second_b = soup.find_all('b')
>>> print(first_b == second_b)
True
>>> print(first_b.previous_element == second_b.previous_element)
False

Cependant, pour vérifier si les deux variables font référence aux mêmes objets, vous pouvez utiliser ce qui suit:

>>> print(first_b is second_b)
False

Copie de beaux objets de soupe

Pour créer une copie de n'importe quelle balise ou NavigableString, utilisez la fonction copy.copy (), comme ci-dessous -

>>> import copy
>>> p_copy = copy.copy(soup.p)
>>> print(p_copy)
<p>Learn Python and <b>Java</b> and advanced <b>Java</b>! from Tutorialspoint</p>
>>>

Bien que les deux copies (originale et copiée) contiennent le même balisage, les deux ne représentent pas le même objet -

>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>

La seule vraie différence est que la copie est complètement détachée de l'arborescence d'objets originale de Beautiful Soup, comme si extract () avait été appelé dessus.

>>> print(p_copy.parent)
None

Le comportement ci-dessus est dû à deux objets de balise différents qui ne peuvent pas occuper le même espace en même temps.