关于Python的requests中text中文乱码的问题

今天学习python爬虫是遇到了字符编码的问题

target = 'http://www.biqukan.com/1_1094/5403177.html'
req = requests.get(url=target)
print req.text

打印出来的中文都是乱码,现在说一下解决方案。
首先要明确的是,req.text返回的是unicode,也就是说无法再decode,所以网上那些先decode再encode的方法是没法使用的,这种方法适用的是req.content。
通过查看网站源码,发现网站使用的charset是gbk,Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它,我认为requests对编码做出了错误的判断,所以进行了下面的设置:

req.encoding='gbk'

注意,这里的gbk是因为网页使用的是gbk。
然后再对text进行编码

text = req.text
print text.encode('utf-8')

就能正确的打印出中文了
完整的代码如下:

# coding: UTF-8
import requests

if __name__ == '__main__':
    target = 'http://www.biqukan.com/1_1094/5403177.html'
    req = requests.get(url=target)
    req.encoding='gbk'
    # content = req.content.decode('gbk').encode('utf-8')
    # print content
    text = req.text
    print(isinstance(text, unicode))
    print text.encode('utf-8')

你可能感兴趣的:(学习)