TL;DR
Avec BeautifulSoup 4, utilisez element.encode_contents()
si vous voulez une chaîne d'octets encodée en UTF-8, ou utilisez element.decode_contents()
si vous voulez une chaîne Unicode Python. Par exemple, la méthode innerHTML du DOM ressemblerait à ceci :
def innerHTML(element):
"""Retourne le HTML interne d'un élément en tant que chaîne d'octets encodée en UTF-8."""
return element.encode_contents()
Ces fonctions ne sont actuellement pas dans la documentation en ligne, je vais donc citer les définitions actuelles des fonctions et la chaîne de documentation du code.
encode_contents
- depuis la version 4.0.4
def encode_contents(
self, indent_level=None, encoding=DEFAULT_OUTPUT_ENCODING,
formatter="minimal"):
"""Rend le contenu de cette balise en tant que chaîne d'octets.
:param indent_level: Chaque ligne du rendu sera
indentée de ce nombre d'espaces.
:param encoding: La chaîne d'octets sera dans cet encodage.
:param formatter: Le formateur de sortie responsable de la conversion
des entités en caractères Unicode.
"""
Voir aussi la documentation sur les formateurs ; vous utiliserez probablement formatter="minimal"
(le défaut) ou formatter="html"
(pour les entités html) à moins que vous ne vouliez traiter le texte manuellement de quelque manière.
encode_contents
renvoie une chaîne d'octets encodée. Si vous voulez une chaîne Unicode Python, utilisez plutôt decode_contents
.
decode_contents
- depuis la version 4.0.1
decode_contents
fait la même chose que encode_contents
mais renvoie une chaîne Unicode Python au lieu d'une chaîne d'octets encodée.
def decode_contents(self, indent_level=None,
eventual_encoding=DEFAULT_OUTPUT_ENCODING,
formatter="minimal"):
"""Rend le contenu de cette balise en tant que chaîne Unicode.
:param indent_level: Chaque ligne du rendu sera
indentée de ce nombre d'espaces.
:param eventual_encoding: La balise est destinée à être
encodée dans cet encodage. Cette méthode n'est _pas_
responsable de réaliser cette encodage. Ces informations
sont passées pour qu'elles puissent être substituées si le
document contient une balise mentionnant l'encodage du document.
:param formatter: Le formateur de sortie responsable de la conversion
des entités en caractères Unicode.
"""
BeautifulSoup 3
BeautifulSoup 3 n'a pas les fonctions mentionnées ci-dessus, à la place, il a renderContents
def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING,
prettyPrint=False, indentLevel=0):
"""Rend le contenu de cette balise en tant que chaîne dans l'encodage donné.
Si l'encodage est None, renvoie une chaîne Unicode."""
Cette fonction a été ajoutée à BeautifulSoup 4 (dans la version 4.0.4) pour la compatibilité avec BS3.