一、方法描述
为了获取一个格式良好的 Unicode 字符串,可以使用 BeautifulSoup 的 prettify()
方法。它会格式化 BeautifulSoup 解析树,使得每个标签都在单独的一行,并且有缩进。这样可以让您更容易地可视化 BeautifulSoup 解析树的结构。
二、语法
prettify(encoding, formatter)
三、参数
-
encoding
:最终字符串的编码。如果为 None
,则返回一个 Unicode 字符串。
-
formatter
:一个 Formatter 对象,或者是命名标准 Formatter 的字符串。
四、返回类型
prettify()
方法返回一个 Unicode 字符串(如果 encoding==None
),或一个字节字符串(否则)。
五、示例
示例 1
考虑以下的 HTML 字符串。
<p>The quick, <b>brown fox</b> jumps over a lazy dog.</p>
使用 prettify()
方法我们可以更好地理解其结构:
html = '''
<p>The quick, <b>brown fox</b> jumps over a lazy dog.</p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
print(soup.prettify())
输出:
<html>
<body>
<p>
The quick,
<b>
brown fox
</b>
jumps over a lazy dog.
</p>
</body>
</html>
示例 2
您可以在文档中的任何 Tag 对象上调用 prettify()
。
print(soup.b.prettify())
输出:
<b>
brown fox
</b>
prettify()
方法是为了理解文档的结构。但是,不应该用来重新格式化文档,因为它会添加空白(以换行的形式),并且改变 HTML 文档的意义。
prettify()
方法可以可选地提供 formatter
参数来指定使用的格式化规则。
对于 formatter
可能的值如下:
-
formatter="minimal"
:这是默认的。字符串仅会被处理到足以确保 BeautifulSoup 生成有效的 HTML/XML。
-
formatter="html"
:BeautifulSoup 将尽可能地将 Unicode 字符转换为 HTML 实体。
-
formatter="html5"
:类似于 formatter="html"
,但是 BeautifulSoup 会在 HTML 空元素标签(如 "br")中省略关闭斜杠。
-
formatter=None
:在输出时,BeautifulSoup 完全不会修改字符串。这是最快的选项,但它可能导致 BeautifulSoup 生成无效的 HTML/XML。
示例 3
from bs4 import BeautifulSoup
french = "<p>Il a dit <<Sacré bleu!>></p>"
soup = BeautifulSoup(french, 'html.parser')
print("minimal: ")
print(soup.prettify(formatter="minimal"))
print("html: ")
print(soup.prettify(formatter="html"))
print("None: ")
print(soup.prettify(formatter=None))
输出:
minimal:
<p>
Il a dit <<
<sacré bleu!="">
>>
</sacré>
</p>
html:
<p>
Il a dit <<
<sacré bleu!="">
>>
</sacré>
</p>
None:
<p>
Il a dit <<
<sacré bleu!="">
>>
</sacré>
</p>