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.