2011年4月10日日曜日

ドキュメントを表示する

あなたは、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>

注記: strrenderContents はドキュメント中のタグで使用された際、異なる結果を返します。 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 件のコメント:

コメントを投稿

【和訳】Django Rest Framework 目次

目次 【和訳】Django Rest Framework クイックスタート 【和訳】Django Rest Framework チュートリアル1:シリアル化 【和訳】Django Rest Framework チュートリアル2:リクエストとレスポンス 【和訳】Django Res...