解决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 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
python实现simhash算法实例
Apr 25 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Python缓存技术实现过程详解
Sep 25 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python学习笔记之装饰器
Aug 06 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Scrapy实现模拟登录的示例代码
Feb 21 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大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php单例模式的简单实现方法
2016/06/10 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
python操作xml文件示例
2014/04/07 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python实现手机通讯录搜索功能
2018/02/22 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
python能做什么 python的含义
2019/10/12 Python
python3爬取torrent种子链接实例
2020/01/16 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
五一家具促销方案
2014/01/10 职场文书
财务管理专业自荐书
2014/09/02 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
地震慰问信
2015/02/14 职场文书
单位考核聘任报告
2015/03/02 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
行政诉讼答辩状
2015/05/21 职场文书
老干部座谈会主持词
2015/07/03 职场文书
孙振耀退休感言
2015/08/01 职场文书
Python机器学习之基础概述
2021/05/19 Python
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Windows server 2016服务器基本设置
2022/08/14 Servers