基本上我有这段代码:
page = requests.get("some_url" )
tree = html.fromstring(page.content)
fo = codecs.open("path to file", "w", encoding='utf8')
txt = tree.xpath("some_xpath_expr")
fo.write( txt )
fo.close()
并将xpath保存到文件中。但是当我这样做时:
txt = page.content
代替txt=tree.xpath()
,当我写入文件时,它返回
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0
所以,如果我这样做:
txt = page.content.encode("utf8")
再次正常工作。
所以,我的问题是为什么会发生这种情况?我的意思是tree.xpath
返回unicode字符串而requests.get()
没有吗?我很困惑。
答案 0 :(得分:2)
page.content
为您提供二进制/字节响应内容,而不是文本响应内容。您可能希望使用page.text
而不是page.content
。当某些东西需要文本并且你给它字节时,python通常会尝试使用ascii编解码器将字节转换为文本,这样你的情况就会失败,因为内容不是ascii编码的(它可能是utf-8)。您可以通过查看page.encoding
来查看使用的响应编码,但如果直接使用page.text
,则无需关心使用的编码。
参考文献: http://docs.python-requests.org/en/latest/user/quickstart/#response-content http://docs.python-requests.org/en/latest/user/quickstart/#binary-response-content