一、方法描述
在 BeautifulSoup 中,encode()
方法渲染给定的 PageElement
及其内容的字节字符串表示形式。
prettify()
方法允许您轻松地可视化 BeautifulSoup 解析树的结构,并具有 encoding
参数。encode()
方法的作用与 prettify()
方法中的编码相同。
二、语法
encode(encoding, indent_level, formatter, errors)
三、参数
-
-
indent_level
:渲染的每一行将被缩进此等级。在递归调用时用于格式化打印。
-
formatter
:一个 Formatter 对象,或者是命名标准 Formatter 的字符串。
-
四、返回值
encode()
方法返回标签及其内容的字节字符串表示形式。
五、示例
示例 1
encoding
参数默认为 utf-8
。下面的代码展示了 soup
对象的编码后的字节字符串表示形式。
from bs4 import BeautifulSoup
soup = BeautifulSoup("Hello “World!”", 'html.parser')
print(soup.encode('utf-8'))
输出:
b'Hello \xe2\x80\x9cWorld!\xe2\x80\x9d'
示例 2
Formatter 对象有以下预定义的值:
-
formatter="minimal"
:这是默认值。字符串仅会被处理到足以确保 BeautifulSoup 生成有效的 HTML/XML。
-
formatter="html"
:BeautifulSoup 将尽可能地将 Unicode 字符转换为 HTML 实体。
-
formatter="html5"
:类似于 formatter="html"
,但是 BeautifulSoup 会在 HTML 空元素标签(如 "br")中省略关闭斜杠。
-
formatter=None
:在输出时,BeautifulSoup 完全不会修改字符串。这是最快的选项,但它可能导致 BeautifulSoup 生成无效的 HTML/XML。
在下面的例子中,不同的 formatter 值作为 encode()
方法的参数使用。
from bs4 import BeautifulSoup
french = "<p>Il a dit <<Sacré bleu!>></p>"
soup = BeautifulSoup(french, 'html.parser')
print("minimal: ")
print(soup.p.encode(formatter="minimal"))
print("html: ")
print(soup.p.encode(formatter="html"))
print("None: ")
print(soup.p.encode(formatter=None))
输出:
minimal:
b'<p>Il a dit <<Sacr\xc3\xa9 bleu!>></p>'
html:
b'<p>Il a dit <<Sacré bleu!>></p>'
None:
b'<p>Il a dit <<Sacr\xc3\xa9 bleu!>></p>'
示例 3
下面的例子使用 Latin-1 作为 encoding
参数。
markup = '''
<html>
<head>
<meta content="text/html; charset=ISO-Latin-1" http-equiv="Content-type" />
</head>
<body>
<p>Sacr`e bleu!</p>
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(markup, 'lxml')
print(soup.p.encode("latin-1"))
输出:
b'<p>Sacr`e bleu!</p>'