请求表头headers设置Accept-Encoding为gzip,deflate,br时,python ——requets的get/post返回的结果有可能是乱码

爬取某页面的数据时,在我本机环境进行请求,返回的结果是正常的,即不乱码,但是把代码拷贝到其他电脑运行,返回的结果就是乱码了。如下:
我本机的请求结果:
在这里插入图片描述
其他电脑运行返回的数据是乱码的,无论是设置utf-8、gbk还是设置gb2312,都无法解码:
在这里插入图片描述
百度了好久,都是说返回结果中文乱码的解决方案,都没有把问题解决(原来是自己问题点没有搜索对,毕竟当时自己也想不到)。后面在技术群中请教大佬后,才知道是headers请求头的Accept-Encoding设置值的问题,即Accept-Encoding='gzip,deflate,br’。
因为代码都一样,在自己本机运行都正常,所以压根想不到是这个导致,所以也没有一个一个的注释进行调试。

最终解决方案就是把gzip去掉,或者把 Accept-Encoding='gzip,deflate,br’ 整行都注释了,再次请求就可以得到正常的结果了。如下:
在这里插入图片描述
当然网上还有给出另一个方案(这方案在python我不知道怎么用,大家可以自行选择,有知道的也可以留意指导,毕竟本人菜鸟一枚):

设置Header的Accept-Encoding值的同时设置对应的自动解压缩的模式
req.Headers["Accept-Encoding"] = "gzip,deflate,br";
req.AutomaticDecompression = DecompressionMethods.GZip;

‘Accept-Encoding’:是浏览器发给服务器,声明浏览器支持的编码类型。一般有gzip,deflate,sdch,br 等等。
网上对这的解释,那就是:

普通浏览器访问网页,之所以添加"Accept-Encoding" = “gzip,deflate,br”,那是因为,浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。
而在我们编写的代码中,如果也添加此头信息,结果就是,返回的压缩后的数据,没有解码,而将压缩后的数据当做普通的html文本来处理,当前显示出来的内容,是乱码了。

相关信息:
从python爬虫引发出的gzip,deflate,sdch,br压缩算法分析 http://www.cnblogs.com/RainLa/p/8057367.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值