Piękna Zupa - Piękne Przedmioty
Punktem wyjścia każdego projektu BeautifulSoup jest obiekt BeautifulSoup. Obiekt BeautifulSoup reprezentuje wejściowy dokument HTML / XML użyty do jego utworzenia.
Możemy przekazać ciąg znaków lub obiekt podobny do pliku dla Beautiful Soup, gdzie pliki (obiekty) są lokalnie przechowywane na naszym komputerze lub na stronie internetowej.
Najczęstsze obiekty BeautifulSoup to -
- Tag
- NavigableString
- BeautifulSoup
- Comment
Porównywanie obiektów pod kątem równości
Podobnie jak w przypadku pięknej zupy, dwa obiekty ciągów lub tagów, po których można nawigować, są równe, jeśli reprezentują te same znaczniki HTML / XML.
Spójrzmy teraz na poniższy przykład, w którym dwa znaczniki <b> są traktowane jako równe, mimo że znajdują się w różnych częściach drzewa obiektów, ponieważ oba wyglądają jak „<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
Jednakże, aby sprawdzić, czy te dwie zmienne odnoszą się do tych samych obiektów, możesz użyć następującego polecenia -
>>> print(first_b is second_b)
False
Kopiowanie obiektów Beautiful Soup
Aby utworzyć kopię dowolnego tagu lub NavigableString, użyj funkcji copy.copy (), tak jak poniżej -
>>> 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>
>>>
Chociaż dwie kopie (oryginalna i skopiowana) zawierają te same znaczniki, jednak nie reprezentują tego samego obiektu -
>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>
Jedyną prawdziwą różnicą jest to, że kopia jest całkowicie oddzielona od oryginalnego drzewa obiektów Beautiful Soup, tak jakby została wywołana na niej extract ().
>>> print(p_copy.parent)
None
Powyższe zachowanie wynika z dwóch różnych obiektów tagów, które nie mogą zajmować tego samego miejsca w tym samym czasie.