unicode文本的奇怪行为

时间:2016-01-17 21:52:19

标签: python xpath lxml

基本上我有这段代码:

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()没有吗?我很困惑。

1 个答案:

答案 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