解决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获取电脑硬件信息及状态的实现方法
Aug 29 Python
跟老齐学Python之list和str比较
Sep 20 Python
利用Python演示数型数据结构的教程
Apr 03 Python
详解python的数字类型变量与其方法
Nov 20 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
python3图片文件批量重命名处理
Oct 31 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
python 中yaml文件用法大全
Jul 04 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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与php MySQL 之间的关系
2009/07/17 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
python中split方法用法分析
2015/04/17 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
python画折线图的程序
2018/07/26 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
如何利用python生成MD5并去重
2020/12/07 Python
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
路政管理专业推荐信
2013/11/11 职场文书
银行求职推荐信范文
2013/11/30 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
八项规定整改方案
2014/10/01 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
安全责任协议书范本
2016/03/23 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
Redis集群的关闭与重启操作
2021/07/07 Redis