Beautiful Soup 简明教程

Beautiful Soup - NavigableString Class

Beautiful Soup API 中普遍存在的一个主要对象是 NavigableString 类的对象。它表示大多数 HTML 标记的开始和结束部分之间的字符串或文本。例如,如果 <b>Hello</b> 是要解析的标记,Hello 是 NavigableString。

NavigableString 类是 bs4 包中的 PageElement 类的子类,也是 Python 的内置 str 类的子类。因此,它继承了 PageElement 方法,如 find_*()、insert、append、wrap、unwrap 方法以及 str 类的 upper、lower、find、isalpha 等方法。

此类的构造函数采用一个参数,即 str 对象。

Example

from bs4 import NavigableString
new_str = NavigableString('world')

现在,您可以使用此 NavigableString 对象对解析的树执行各种操作,例如 append、insert、find 等。

在下面的示例中,我们将新创建的 NavigableString 对象附加到现有的 Tab 对象。

Example

from bs4 import BeautifulSoup, NavigableString

markup = '<b>Hello</b>'
soup = BeautifulSoup(markup, 'html.parser')

tag = soup.b
new_str = NavigableString('world')
tag.append(new_str)
print (soup)

Output

<b>Helloworld</b>

请注意,NavigableString 是一个 PageElement,因此它也可以附加到 Soup 对象。如果我们这样做,请检查差异。

Example

new_str = NavigableString('world')
soup.append(new_str)
print (soup)

Output

<b>Hello</b>world

正如我们所看到的, string 位于 <b> 标签之后。

Beautiful Soup 提供了一个 new_string() 方法。创建一个与这个 BeautifulSoup 对象相关联的新 NavigableString。

让我们使用 new_string() 方法创建一个 NavigableString 对象,并将其添加到 PageElements。

Example

from bs4 import BeautifulSoup, NavigableString

markup = '<b>Hello</b>'
soup = BeautifulSoup(markup, 'html.parser')

tag = soup.b

ns=soup.new_string(' World')
tag.append(ns)
print (tag)
soup.append(ns)
print (soup)

Output

<b>Hello World</b>
<b>Hello</b> World

我们在这里发现了一个有趣的行为。NavigableString 对象被添加到树内部的一个标签以及 soup 对象本身。虽然标签显示附加的字符串,但在 soup 对象中,文本 World 被附加,但它不显示在标签中。这是因为 new_string() 方法创建了与 Soup 对象相关联的 NavigableString。