Красивый суп - красивые предметы

Отправной точкой любого проекта BeautifulSoup является объект BeautifulSoup. Объект BeautifulSoup представляет собой входной документ HTML / XML, используемый для его создания.

Мы можем передать строку или объект в виде файла для Beautiful Soup, где файлы (объекты) либо хранятся локально на нашем компьютере, либо на веб-странице.

Наиболее распространенные объекты BeautifulSoup:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Сравнение объектов на равенство

Согласно красивому супу, две доступные для навигации строковые или теговые объекты равны, если они представляют одну и ту же разметку HTML / XML.

Теперь давайте посмотрим на приведенный ниже пример, где два тега <b> рассматриваются как равные, даже если они находятся в разных частях дерева объектов, потому что оба они выглядят как «<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

Однако, чтобы проверить, относятся ли две переменные к одним и тем же объектам, вы можете использовать следующее:

>>> print(first_b is second_b)
False

Копирование объектов Beautiful Soup

Чтобы создать копию любого тега или NavigableString, используйте функцию copy.copy (), как показано ниже -

>>> 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>
>>>

Хотя две копии (исходная и скопированная) содержат одинаковую разметку, однако они не представляют один и тот же объект -

>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>

Единственное реальное отличие состоит в том, что копия полностью отделяется от исходного дерева объектов Beautiful Soup, как если бы для него был вызван extract ().

>>> print(p_copy.parent)
None

Вышеуказанное поведение обусловлено двумя разными объектами тегов, которые не могут одновременно занимать одно и то же пространство.