解决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实现的简单算术游戏实例
May 26 Python
python发送HTTP请求的方法小结
Jul 08 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Python金融数据可视化汇总
Nov 17 Python
在vscode中配置python环境过程解析
Sep 28 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
Python实现CNN的多通道输入实例
Jan 17 Python
pyqt5中动画的使用详解
Apr 01 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python 判断文件或文件夹是否存在
Mar 18 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python构建XML树结构的方法示例
2017/06/30 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python语言快速上手学习方法
2018/12/14 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
社团招新策划书
2014/02/04 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
导师对论文的学术评语
2015/01/04 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL