解决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检测网站链接是否已存在
Apr 07 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
Selenium的使用详解
Oct 19 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
python实现批量修改文件名
Mar 23 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
详解Python中namedtuple的使用
Apr 27 Python
python 如何调用 dubbo 接口
Sep 24 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(3)
2006/10/09 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
jQuery 选择器详解
2015/01/19 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python中实现对list做减法操作介绍
2015/01/09 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
如何基于Python批量下载音乐
2019/11/11 Python
计算机毕业大学生推荐信
2013/12/01 职场文书
教师党员公开承诺书
2014/03/25 职场文书
献爱心倡议书
2014/04/14 职场文书
拾金不昧表扬信
2015/01/16 职场文书
女方离婚起诉书
2015/05/18 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技