python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python的requests中text中文乱码

解决Python的requests中text中文乱码的问题

作者:Dontes_cn

学习Python爬虫时遇到中文乱码问题,发现req.text返回的是unicode,无法再次decode,通过查看网站源码,发现网站使用的是gbk编码,Requests会自动解码来自服务器的内容,但有时推测错误,通过设置r.encoding为gbk,然后对text进行编码,可以正确打印出中文

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')

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文