div
のあるページがあるとします。そのdivはsoup.find()
で簡単に取得できます。
結果が得られたので、そのinnerhtml
の全体div
を出力したいと思います。つまり、すべてのHTMLタグとテキストをすべて正確にまとめた文字列が必要です。 JavaScriptでobj.innerHTML
を使用して取得する文字列のように。これは可能ですか?
BeautifulSoup 4では、UTF-8でエンコードされたバイト文字列が必要な場合はelement.encode_contents()
を使用し、Python Unicode文字列が必要な場合はelement.decode_contents()
を使用します。たとえば、- DOMのinnerHTMLメソッド は次のようになります。
def innerHTML(element):
"""Returns the inner HTML of an element as a UTF-8 encoded bytestring"""
return element.encode_contents()
これらの関数は現在オンラインドキュメントにはないので、コードから現在の関数定義とdoc文字列を引用します。
encode_contents
-4.0.4以降def encode_contents(
self, indent_level=None, encoding=DEFAULT_OUTPUT_ENCODING,
formatter="minimal"):
"""Renders the contents of this tag as a bytestring.
:param indent_level: Each line of the rendering will be
indented this many spaces.
:param encoding: The bytestring will be in this encoding.
:param formatter: The output formatter responsible for converting
entities to Unicode characters.
"""
フォーマッタのドキュメント も参照してください。何らかの方法でテキストを手動で処理したくない場合は、formatter="minimal"
(デフォルト)またはformatter="html"
( htmlエンティティ の場合)を使用する可能性が最も高くなります。
encode_contents
は、エンコードされたバイト文字列を返します。 Python Unicode文字列が必要な場合は、代わりにdecode_contents
を使用してください。
decode_contents
-4.0.1以降decode_contents
はencode_contents
と同じことを行いますが、エンコードされたバイト文字列の代わりにPython Unicode文字列を返します。
def decode_contents(self, indent_level=None,
eventual_encoding=DEFAULT_OUTPUT_ENCODING,
formatter="minimal"):
"""Renders the contents of this tag as a Unicode string.
:param indent_level: Each line of the rendering will be
indented this many spaces.
:param eventual_encoding: The tag is destined to be
encoded into this encoding. This method is _not_
responsible for performing that encoding. This information
is passed in so that it can be substituted in if the
document contains a <META> tag that mentions the document's
encoding.
:param formatter: The output formatter responsible for converting
entities to Unicode characters.
"""
BeautifulSoup 3には上記の機能はありませんが、代わりにrenderContents
があります。
def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING,
prettyPrint=False, indentLevel=0):
"""Renders the contents of this tag as a string in the given
encoding. If encoding is None, returns a Unicode string.."""
この関数は、BS3との互換性のためにBeautifulSoup 4( 4.0.4 )に追加されました。
オプションの1つは、次のようなものを使用できます。
innerhtml = "".join([str(x) for x in div_element.contents])
テキストのみが必要な場合(HTMLタグは必要ありません)、.text
を使用できます。
soup.select("div").text
unicode(x)
だけではどうですか?私のために働くようです。
編集:これは、内部ではなく外部HTMLを提供します。
まあ、あなただけのために.get_text()
を使うこともできます[〜#〜] text [〜#〜]
soup.select("div").get_text()