📅  最后修改于: 2020-11-09 14:32:01             🧑  作者: Mango
任何BeautifulSoup项目的起点都是BeautifulSoup对象。 BeautifulSoup对象代表用于创建其的输入HTML / XML文档。
我们可以为Beautiful Soup传递字符串或类似文件的对象,其中文件(对象)可以本地存储在我们的计算机或网页中。
最常见的BeautifulSoup对象是-
按照漂亮的汤,如果两个可导航字符串或标记对象表示相同的HTML / XML标记,则它们相等。
现在让我们看下面的示例,其中两个标签被视为相等,即使它们位于对象树的不同部分中,因为它们都看起来像“ Java b>”。
>>> markup = "Learn Python and Java and advanced Java! from Tutorialspoint
"
>>> 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
要创建任何标签或NavigableString的副本,请使用copy.copy()函数,如下所示:
>>> import copy
>>> p_copy = copy.copy(soup.p)
>>> print(p_copy)
Learn Python and Java and advanced Java! from Tutorialspoint
>>>
尽管两个副本(原始副本和副本副本)包含相同的标记,但是两个并不代表相同的对象-
>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>
唯一真正的区别是,该副本已与原始的Beautiful Soup对象树完全分离,就像在其上调用了extract()一样。
>>> print(p_copy.parent)
None
上面的行为是由于两个不同的标记对象无法同时占用相同的空间。