web-dev-qa-db-ja.com

HTMLページを解析するためにio.BytesIOをio.StringIOに変換します

PyCurlを介して取得したHTMLページを解析しようとしていますが、pyCurl WRITEFUNCTIONは文字列ではなくBYTESとしてページを返しているため、BeautifulSoupを使用してページを解析できません。

Io.BytesIOをio.StringIOに変換する方法はありますか?

または、HTMLページを解析する他の方法はありますか?

私はPython 3.3.2を使用しています。

19
Shipra

素朴なアプローチ:

# 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

受け入れられた回答のコードは、実際にはストリームから完全に読み取ってデコードします。以下は正しい方法であり、1つのストリームを別のストリームに変換します。データはチャンクごとに読み取ることができます。

# 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