Преобразование io.BytesIO в io.StringIO для анализа HTML-страницы

Я пытаюсь проанализировать HTML-страницу, которую я получил через pyCurl, но pyCurl WRITEFUNCTION возвращает страницу как BYTES, а не строку, поэтому я не могу ее проанализировать с помощью BeautifulSoup.

Есть ли способ конвертировать io.BytesIO в io.StringIO?

Или Есть ли другой способ проанализировать HTML-страницу?

Я использую Python 3.3.2.

Ответ 1

Наивный подход:

# 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 what you need

Ответ 2

код в принятом ответе фактически читает из потока полностью для декодирования. Ниже приведен правильный способ преобразования одного потока в другой, где данные могут быть прочитаны по частям.

# 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())