web-dev-qa-db-fra.com

Convertir io.BytesIO en io.StringIO pour analyser la page HTML

J'essaie d'analyser une page HTML que j'ai récupérée via pyCurl mais le pyCurl WRITEFUNCTION renvoie la page en BYTES et non en chaîne, donc je ne peux pas l'analyser en utilisant BeautifulSoup.

Existe-t-il un moyen de convertir io.BytesIO en io.StringIO?

Ou existe-t-il un autre moyen d'analyser la page HTML?

J'utilise Python 3.3.2.

19
Shipra

Une approche naïve:

# assume bytes_io is a `BytesIO` object
byte_str = bytes_io.read()

# Convert to a "unicode" object
text_obj = byte_str.decode('UTF-8')  # Or use the encoding you expect

# Use text_obj how you see fit!
# io.StringIO(text_obj) will get you to a StringIO object if that's what you need
10
Anthony Sottile

le code dans la réponse acceptée lit en fait complètement à partir du flux pour le décodage. Voici la bonne façon de convertir un flux en un autre, où les données peuvent être lues morceau par morceau.

# Initialize a read buffer
input = io.BytesIO(
    b'Inital value for read buffer with unicode characters ' +
    'ÁÇÊ'.encode('utf-8')
)
wrapper = io.TextIOWrapper(input, encoding='utf-8')

# Read from the buffer
print(wrapper.read())
29
kakarukeys