解决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 27 Python
Django如何自定义分页
Sep 25 Python
Python爬取成语接龙类网站
Oct 19 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
对python中assert、isinstance的用法详解
Nov 27 Python
Python数据存储之 h5py详解
Dec 26 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
python爬虫工具例举说明
Nov 30 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
详解Python生成器和基于生成器的协程
Jun 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
开发大型PHP项目的方法
2006/10/09 PHP
PHP新手上路(四)
2006/10/09 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
PHP分页类集锦
2014/11/18 PHP
jquery获取复选框被选中的值
2014/04/10 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
深入理解vue中的$set
2017/06/01 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
电气专业推荐信范文
2013/11/18 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
森林防火宣传标语
2014/06/27 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
文明上网主题班会
2015/08/14 职场文书