目录
爬虫编码总结
原因
取到的网页文字内容在编码上存在一定的 trick ,简单来说就是 unicode 形式的 gbk 编码内容,形如:
u'\xd6\xb0\xce\xbb\xc3\xe8\xca\xf6'
而事实上,这个字符串实际所要表达的 gbk 编码内容为
‘\xd6\xb0\xce\xbb\xc3\xe8\xca\xf6’,对应的汉字字符为“职位描述”
解这个问题可参见
http://stackoverflow.com/questions/14539807/convert-unicode-with-utf-8-string-as-content-to-str
可以看到,关键之处在于利用了以下这一特性:
Unicode codepoints U+0000 to U+00FF all map one-on-one with the latin-1 encoding
先将 unicode 字符串编码为 latin1 字符串,编码后保留了等价的字节流数据。
而此时在这个问题中,这一字节流数据又恰恰对应了 gbk 编码,因此对其进行解码即可还原最初的 unicode 字符。
不过值得注意的是,需要确定的是形如\xd6\xb0 究竟是 utf8 编码还是类似 gbk 类型的其他编码,
这一点对于最终正确还原 unicode 字符同样重要。
综上所述,对拿到的 content 执行以下操作即可:
content.encode(“latin1”).decode(“gbk”)
解决方案
resp = requests.get('http://www.******')
print resp.encoding # ISO-8859-1
print resp.apparent_encoding # GB2312
resp.encoding = resp.apparent_encoding
content = res