str
関数や、prettify
メソッド、renderContents
メソッドを使って、Beautiful Soupドキュメント(や、その一部)を文字列に変換できます。また、ドキュメント全体をUnicode文字列として取得するために、
unicode
関数を使うことも出来ます。
prettify
メソッドは、ドキュメントの構造を明白にするための、戦略的な改行とスペースを追加します。また、ホワイトスペースだけを含んだテキストノードを除去します、これによって、XMLドキュメントの意味が変わってしまうかもしれません。
str
関数とunicode
関数はホワイトスペースだけを含んだテキストノードを除去せず、また、それぞれのノード間にホワイトスペースを追加したりしません。ここに例があります。
from BeautifulSoup import BeautifulSoup doc = "<html><h1>Heading</h1><p>Text" soup = BeautifulSoup(doc) str(soup) # '<html><h1>Heading</h1><p>Text</p></html>' soup.renderContents() # '<html><h1>Heading</h1><p>Text</p></html>' soup.__str__() # '<html><h1>Heading</h1><p>Text</p></html>' unicode(soup) # u'<html><h1>Heading</h1><p>Text</p></html>' soup.prettify() # '<html>\n <h1>\n Heading\n </h1>\n <p>\n Text\n </p>\n</html>' print soup.prettify() # <html> # <h1> # Heading # </h1> # <p> # Text # </p> # </html>
注記:
str
と renderContents
はドキュメント中のタグで使用された際、異なる結果を返します。 str
はタグとその内容を表示し、renderContents
は、内容のみを表示します。heading = soup.h1 str(heading) # '<h1>Heading</h1>' heading.renderContents() # 'Heading'
__str__
や、 prettify
や、 renderContents
を呼び出す時、出力エンコーディングを指定できます。デフォルトエンコーディング(str
が使用するエンコーディング) は、UTF-8です。ここでは、ISO-8851-1 文字列を解析し、そして、同じ文字列を異なるエンコーディングで出力する例を示します:
from BeautifulSoup import BeautifulSoup doc = "Sacr\xe9 bleu!" soup = BeautifulSoup(doc) str(soup) # 'Sacr\xc3\xa9 bleu!' # UTF-8 soup.__str__("ISO-8859-1") # 'Sacr\xe9 bleu!' soup.__str__("UTF-16") # '\xff\xfeS\x00a\x00c\x00r\x00\xe9\x00 \x00b\x00l\x00e\x00u\x00!\x00' soup.__str__("EUC-JP") # 'Sacr\x8f\xab\xb1 bleu!'
元のドキュメントがエンコーディング宣言を含んでいた場合、Beautiful Soupはドキュメントを文字列に戻す際、新しいエンコーディングを宣言するために、宣言を上書きします。
これは、あなたがHTMLドキュメントを読み込み、それを出力する場合、HTMLがクリーンアップされるだけではなく、透過的にUTF-8に変換されることを意味します。
ここに、HTMLの例を示します:
from BeautifulSoup import BeautifulSoup doc = """<html> <meta http-equiv="Content-type" content="text/html; charset=ISO-Latin-1" > Sacr\xe9 bleu! </html>""" print BeautifulSoup(doc).prettify() # <html> # <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> # Sacré bleu! # </html>
ここに、XMLの例を示します:
from BeautifulSoup import BeautifulStoneSoup doc = """<?xml version="1.0" encoding="ISO-Latin-1">Sacr\xe9 bleu!""" print BeautifulStoneSoup(doc).prettify() # <?xml version='1.0' encoding='utf-8'> # Sacré bleu!
0 件のコメント:
コメントを投稿