我尝试解析通过pyCurl检索到的HTML页面,但pyCurl WRITEFUNCTION将页面返回为BYTES而不是字符串,因此我无法使用BeautifulSoup解析它。
有没有办法将io.BytesIO转换为io.StringIO?
或者还有其他方法可以解析HTML页面吗?
我使用的是Python 3.3.2。
答案 0 :(得分:23)
接受的答案中的代码实际上完全从流中读取以进行解码。下面是将一个流转换为另一个流的正确方法,在该流中可以逐块读取数据。
# 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())
答案 1 :(得分:9)
一种天真的方法:
# 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