Преобразование 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())