解决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文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
Python实现针对中文排序的方法
May 09 Python
python requests 使用快速入门
Aug 31 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
python opencv进行图像拼接
Mar 27 Python
python实现图片素描效果
Sep 26 Python
matplotlib相关系统目录获取方式小结
Feb 03 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
curl和libcurl的区别简介
2015/07/01 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
js 小贴士一星期合集
2010/04/07 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
vue跨域解决方法
2017/10/15 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python 可视化神器Plotly详解
2020/12/26 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
数据库笔试题
2013/05/09 面试题
最新英语专业学生求职信范文
2013/09/21 职场文书
安卓程序员求职信
2014/02/28 职场文书
成人继续教育实施方案
2014/03/01 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
大学新生军训方案
2014/05/03 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
优秀班组申报材料
2014/12/25 职场文书
监考失职检讨书
2015/01/26 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js