解决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竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python线程池threadpool实现篇
Apr 27 Python
python队列queue模块详解
Apr 27 Python
python url 参数修改方法
Dec 26 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
python调用webservice接口的实现
Jul 12 Python
python使用rsa非对称加密过程解析
Dec 28 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
高考考python编程是真的吗
Jul 20 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
pandas 数据类型转换的实现
Dec 29 Python
Python闭包的定义和使用方法
Apr 11 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实现保存周期为1天的购物车类
2017/07/07 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
python分析作业提交情况
2017/11/22 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
C#实现启动一个进程
2016/10/01 面试题
高职教师岗位职责
2013/12/24 职场文书
竞选学委演讲稿
2014/09/13 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers