Beautiful Soup - Beautiful Objects
Il punto di partenza di qualsiasi progetto BeautifulSoup è l'oggetto BeautifulSoup. Un oggetto BeautifulSoup rappresenta il documento HTML / XML di input utilizzato per la sua creazione.
Possiamo passare una stringa o un oggetto simile a un file per Beautiful Soup, dove i file (oggetti) sono memorizzati localmente nella nostra macchina o in una pagina web.
Gli oggetti BeautifulSoup più comuni sono:
- Tag
- NavigableString
- BeautifulSoup
- Comment
Confronto di oggetti per l'uguaglianza
Come per la bella zuppa, due oggetti stringa o tag navigabili sono uguali se rappresentano lo stesso markup HTML / XML.
Vediamo ora l'esempio seguente, in cui i due tag <b> sono trattati come uguali, anche se risiedono in parti diverse dell'albero degli oggetti, perché entrambi hanno l'aspetto di "<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
Tuttavia, per verificare se le due variabili si riferiscono agli stessi oggetti, è possibile utilizzare quanto segue -
>>> print(first_b is second_b)
False
Copia di oggetti Beautiful Soup
Per creare una copia di qualsiasi tag o NavigableString, usa la funzione copy.copy (), proprio come sotto -
>>> 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>
>>>
Sebbene le due copie (originale e quella copiata) contengano lo stesso markup, le due non rappresentano lo stesso oggetto -
>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>
L'unica vera differenza è che la copia è completamente staccata dall'albero degli oggetti Beautiful Soup originale, proprio come se su di essa fosse stato chiamato extract ().
>>> print(p_copy.parent)
None
Il comportamento precedente è dovuto a due diversi oggetti tag che non possono occupare lo stesso spazio contemporaneamente.