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文件的格式化規則。

廣告