Красивый суп - красивые предметы
Отправной точкой любого проекта 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
Вышеуказанное поведение обусловлено двумя разными объектами тегов, которые не могут одновременно занимать одно и то же пространство.