解决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中dictionary items()系列函数的用法实例
Aug 21 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
Python 的内置字符串方法小结
Mar 15 Python
python正则表达式re之compile函数解析
Oct 25 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
Python File readlines() 使用方法
Mar 19 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
python利用paramiko实现交换机巡检的示例
Sep 22 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函数
2010/02/16 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
javascript天然的迭代器
2010/10/29 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
Python操作MongoDB详解及实例
2017/05/18 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
保护环境建议书400字
2014/05/13 职场文书
合伙经营协议书范本
2014/09/13 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
学生检讨书范文
2015/01/27 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
德劲DE1108畅想
2021/04/22 无线电
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript