2014-07-04 2 views
4

J'essaye d'analyser une page HTML que j'ai récupérée via pyCurl mais le pyCurl WRITEFUNCTION retourne la page en tant que BYTES et non en tant que chaîne, donc je suis incapable de l'analyser en utilisant BeautifulSoup.Convertir io.BytesIO en io.StringIO pour analyser la page HTML

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

Ou existe-t-il un autre moyen d'analyser la page HTML? Je utilise Python 3.3.2.

+0

fait l'approche naïve d'épuiser la 'BytesIO' et la construction d'un' StringIO' de la sortie ne satisfait vos contraintes? –

Répondre

4

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 
+2

Merci, ça a marché. Mais au lieu de bytes_io.read() j'ai utilisé bytes_io.getvalue() car le premier ne fonctionnait pas. – Shipra

+1

ah ouais j'ai supposé que votre 'BytesIO' était au début du flux. 'getvalue' je crois devrait fonctionner peu importe où vous êtes :) –

+0

Normalement, vous devrez appeler' bytes_io.seek (0) 'avant l'appel read(). Comme le mentionne @AnthonySottile, 'getvalue' contourne cela. – Quantum7

Questions connexes