解决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实现优先级队列结构的方法详解
Jun 02 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python中 logging的使用详解
Oct 25 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
浅析Python 序列化与反序列化
Aug 05 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
用Python制作灯光秀短视频的思路详解
Apr 13 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
新52大事件
2020/03/03 欧美动漫
php静态文件返回304技巧分享
2015/01/06 PHP
php include类文件超时问题处理
2015/02/06 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
JDO的含义
2012/11/17 面试题
高等教育学自荐书范文
2014/02/10 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
企业人事任命书
2014/06/05 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
项目战略合作意向书
2015/05/08 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript