Sopa Linda - Objetos Bonitos

O ponto de partida de qualquer projeto BeautifulSoup é o objeto BeautifulSoup. Um objeto BeautifulSoup representa o documento HTML / XML de entrada usado para sua criação.

Podemos passar uma string ou um objeto semelhante a um arquivo para Beautiful Soup, onde os arquivos (objetos) são armazenados localmente em nossa máquina ou em uma página da web.

Os objetos BeautifulSoup mais comuns são -

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Comparando objetos para igualdade

De acordo com a bela sopa, duas strings navegáveis ​​ou objetos de tag são iguais se representarem a mesma marcação HTML / XML.

Agora vamos ver o exemplo abaixo, onde as duas tags <b> são tratadas como iguais, embora vivam em partes diferentes da árvore de objetos, porque ambas se parecem com “<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

No entanto, para verificar se as duas variáveis ​​se referem aos mesmos objetos, você pode usar o seguinte−

>>> print(first_b is second_b)
False

Copiando objetos da bela sopa

Para criar uma cópia de qualquer tag ou NavigableString, use a função copy.copy (), assim como abaixo -

>>> 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>
>>>

Embora as duas cópias (original e copiada) contenham a mesma marcação, no entanto, as duas não representam o mesmo objeto -

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

A única diferença real é que a cópia é completamente separada da árvore de objetos Beautiful Soup original, como se extract () tivesse sido chamada nela.

>>> print(p_copy.parent)
None

O comportamento acima é devido a dois objetos tag diferentes que não podem ocupar o mesmo espaço ao mesmo tempo.