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.