TL; DR
В BeautifulSoup 4 используйте element.encode_contents()
, если вы хотите, чтобы строка кодировала UTF-8, или element.decode_contents()
, если вы хотите использовать строку Python Unicode. Например, метод innerHTML DOM может выглядеть примерно так:
def innerHTML(element):
"""Returns the inner HTML of an element as a UTF-8 encoded bytestring"""
return element.encode_contents()
Эти функции в настоящее время отсутствуют в онлайн-документации, поэтому я приведу текущие определения функций и строку документа из кода.
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
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.."""
Эта функция была добавлена обратно в BeautifulSoup 4 ( в 4.0.4 ) для совместимости с BS3.