Beautiful Soup - 可导航字符串类



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 对象。

示例

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

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

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

示例

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)

输出

<b>Helloworld</b>

请注意,NavigableString 是一个 PageElement,因此它也可以附加到 Soup 对象。检查一下如果我们这样做会有什么区别。

示例

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

输出

<b>Hello</b>world

正如我们所看到的,字符串出现在<b>标签之后。

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

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

示例

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)

输出

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

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

广告
© . All rights reserved.