Sopa hermosa - Objetos hermosos
El punto de partida de cualquier proyecto de BeautifulSoup es el objeto BeautifulSoup. Un objeto BeautifulSoup representa el documento HTML / XML de entrada utilizado para su creación.
Podemos pasar una cadena o un objeto similar a un archivo para Beautiful Soup, donde los archivos (objetos) se almacenan localmente en nuestra máquina o en una página web.
Los objetos BeautifulSoup más comunes son:
- Tag
- NavigableString
- BeautifulSoup
- Comment
Comparar objetos por igualdad
Según la hermosa sopa, dos cadenas navegables o objetos de etiqueta son iguales si representan el mismo marcado HTML / XML.
Ahora veamos el siguiente ejemplo, donde las dos etiquetas <b> se tratan como iguales, aunque viven en diferentes partes del árbol de objetos, porque ambas se parecen a “<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
Sin embargo, para verificar si las dos variables se refieren a los mismos objetos, puede usar lo siguiente:
>>> print(first_b is second_b)
False
Copiar objetos Beautiful Soup
Para crear una copia de cualquier etiqueta o NavigableString, use la función copy.copy (), como a continuación:
>>> 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>
>>>
Aunque las dos copias (la original y la copiada) contienen el mismo marcado, las dos no representan el mismo objeto:
>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>
La única diferencia real es que la copia está completamente separada del árbol de objetos Beautiful Soup original, como si se hubiera llamado a extract ().
>>> print(p_copy.parent)
None
El comportamiento anterior se debe a dos objetos de etiqueta diferentes que no pueden ocupar el mismo espacio al mismo tiempo.