解决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常用内置函数总结
Feb 08 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
解决reload(sys)后print失效的问题
Apr 25 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
分享3个php获取日历的函数
2015/09/25 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
大学校庆邀请函
2014/01/11 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
模范班主任事迹材料
2014/12/17 职场文书
春风化雨观后感
2015/06/11 职场文书
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers