解决Python requests库编码 socks5代理的问题


Posted in Python onMay 07, 2018

编码问题

response = requests.get(URL, params=params,
      headers=headers, timeout=10)
print 'self.encoding',response.encoding
output:
self.encoding ISO-8859-1

查了一些相关的资料,看了下requests的源码,只有在服务器响应的头部包含有Content-Type,且里面有charset信息,requests能够正确识别,否则就会使用默认的 ISO-8859-1编码。github中也有讨论这个问题,但requests的作者们说是根据rfc来的.

在上述代码中,response.text 是requests库返回响应的Unicode编码内容

这样,当我们去获取一些中文网页的响应内容时,且其响应头部没有charset信息,则response.text的编码就会有问题(requests的json()方法也受这个编码影响)

比如,我爬取百度的网页的时候,其中文是utf-8编码的

如下python2.7代码

In [14]: a = '约' #utf-8编码
In [15]: a
Out[15]: '\xe7\xba\xa6'
In [22]: b=a.decode('ISO-8859-1')#response.text 认为响应内容是ISO-8859-1编码,将其decode为Unicode
In [23]: b
Out[23]: u'\xe7\xba\xa6'
In [26]: c=b.encode('utf8')#如果我们没有注意ISO-8859-1,直接以utf8对其进行编码
In [27]: c
Out[27]: '\xc3\xa7\xc2\xba\xc2\xa6'#那么encode得到的utf-8,在显示器上显示的就是乱码,因为'约'的utf-8编码是'\xe7\xba\xa6'

解决方法1: 用response.content ,response.content in bytes,所以用content可以自己决定对其的编码

解决方法2: 获得请求后使用 response.encoding = ‘utf-8'

解决方法3: 利用requests库里根据获得响应内容来判断编码的函数,参考文献里有讲到

python2的编码还是很乱的 str可以是各种编码,python3统一str为Unicode, byte可以是各种编码

python2中encode后是str类型,decode后是Unicode类型,python3中encode后是byte类型,decode后是str类型(Unicode编码)

用python3吧,下面是python3的代码

In [13]: a = '约' #Unicode
In [14]: type(a)
Out[14]: str
In [15]: b=a.encode('utf8')
In [16]: b
Out[16]: b'\xe7\xba\xa6'
In [17]: type(b)
Out[17]: bytes
In [27]: b'\xe7\xba\xa623,000'.decode('ISO-8859-1')
Out[27]: '约23,000'
In [28]: type(b'\xe7\xba\xa623,000'.decode('ISO-8859-1'))
Out[28]: str
In [29]: b'\xe7\xba\xa623,000'.decode('utf8')
Out[29]: '约23,000'

socks5代理问题

现在的requests2.13.0的socks5代理我在使用的时候会出现问题,

我用的代理是shadowsocks,比如我想要访问https://www.facebook.com 在向本地127.0.0.1:1080端口发送socks5请求时,我发现shadowsocks在向一个IP地址连接,连接不上,我用chrome连接Facebook的时候,我发现shadowsocks是在向www.facebook.com连接,能够成功连接,应该是DNS解析问题,出现了重复解析的问题,使用requests2.12不会有这个问题,在github上也找到了相关的issue

import requests
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
   'AppleWebKit/537.36 (KHTML, like Gecko) '
   'Chrome/56.0.2924.87 Safari/537.36'}
proxies = {'http': 'socks5://127.0.0.1:1080','https':'socks5://127.0.0.1:1080'}
url = 'https://www.facebook.com'
response = requests.get(url, proxies=proxies)
print(response.content)

解决Python requests库编码 socks5代理的问题

解决Python requests库编码 socks5代理的问题

以上这篇解决Python requests库编码 socks5代理的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的计时器timeit的使用方法
Oct 20 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
python实现弹窗祝福效果
Apr 07 Python
python的sorted用法详解
Jun 25 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python pip使用超时问题解决方案
Aug 03 Python
Python天气语音播报小助手
Sep 25 Python
基于python requests库中的代理实例讲解
May 07 #Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 #Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 #Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 #Python
Python代码缩进和测试模块示例详解
May 07 #Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 #Python
利用python的socket发送http(s)请求方法示例
May 07 #Python
You might like
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
DOM相关内容速查手册
2007/02/07 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
对比分析json及XML
2014/11/28 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
浅谈Node.js 沙箱环境
2018/05/15 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
python实现读取命令行参数的方法
2015/05/22 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
应届大学生自荐信格式
2013/09/21 职场文书
英文自荐信
2013/12/19 职场文书
团拜会主持词
2015/07/04 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
Python中tqdm的使用和例子
2022/09/23 Python