Beautiful Soup – Beautiful 对象

Beautiful Soup – Beautiful 对象

任何BeautifulSoup项目的起点,都是BeautifulSoup对象。一个BeautifulSoup对象代表用于创建的输入HTML/XML文档。

我们可以为Beautiful Soup传递一个字符串或一个类似文件的对象,其中文件(对象)可以是本地存储在我们的机器上,也可以是一个网页。

最常见的BeautifulSoup对象是–

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

比较对象的平等性

按照beautiful soup的说法,如果两个可导航字符串或标签对象代表相同的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

上述行为是由于两个不同的标签对象不能同时占据同一空间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程