Beautiful Soup - 输出格式化



如果提供给BeautifulSoup构造函数的HTML字符串包含任何HTML实体,它们将被转换为Unicode字符。

HTML实体是一个以&开头并以;结尾的字符串。它们用于显示保留字符(否则会被解释为HTML代码)。一些HTML实体的示例如下:

< 小于 &lt; &#60;
> 大于 &gt; &#62;
& 和号 &amp; &#38;
" 双引号 &quot; &#34;
' 单引号 &apos; &#39;
" 左双引号 &ldquo; &#8220;
" 右双引号 &rdquo; &#8221;
£ 英镑 &pound; &#163;
¥ 日元 &yen; &#165;
欧元 &euro; &#8364;
© 版权 &copy; &#169;

默认情况下,输出时仅转义裸和号和尖括号。这些将转换为"&amp;","&lt;"和"&gt;"

对于其他字符,它们将被转换为Unicode字符。

示例

from bs4 import BeautifulSoup

soup = BeautifulSoup("Hello “World!”", 'html.parser')
print (str(soup))

输出

Hello "World!"

如果随后将文档转换为字节串,则Unicode字符将被编码为UTF-8。您将不会取回HTML实体 -

示例

from bs4 import BeautifulSoup

soup = BeautifulSoup("Hello “World!”", 'html.parser')
print (soup.encode())

输出

b'Hello \xe2\x80\x9cWorld!\xe2\x80\x9d'

要更改此行为,请为prettify()方法的formatter参数提供一个值。formatter有以下几种可能的值。

formatter="minimal" - 这是默认值。字符串将仅被处理到足以确保Beautiful Soup生成有效的HTML/XML。

formatter="html" - Beautiful Soup将尽可能将Unicode字符转换为HTML实体。

formatter="html5" - 它类似于formatter="html",但Beautiful Soup将省略HTML空标签(如"br")中的结束斜杠。

formatter=None - Beautiful Soup根本不会修改输出中的字符串。这是最快的方法,但可能会导致Beautiful Soup生成无效的HTML/XML。

示例

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!>>
</p>

html:
<p>
 Il a dit <<Sacré bleu!>>
</p>

None:
<p>
 Il a dit <<Sacré bleu!>>
</p>

此外,Beautiful Soup库提供了formatter类。您可以将任何这些类的对象作为参数传递给prettify()方法。

HTMLFormatter类 - 用于自定义HTML文档的格式化规则。

XMLFormatter类 - 用于自定义XML文档的格式化规则。

广告
© . All rights reserved.