国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解決Python requests庫編碼 socks5代理的問題

2020-01-04 15:09:35
字體:
來源:轉載
供稿:網(wǎng)友

編碼問題

response = requests.get(URL, params=params,      headers=headers, timeout=10)print 'self.encoding',response.encodingoutput:self.encoding ISO-8859-1

查了一些相關的資料,看了下requests的源碼,只有在服務器響應的頭部包含有Content-Type,且里面有charset信息,requests能夠正確識別,否則就會使用默認的 ISO-8859-1編碼。github中也有討論這個問題,但requests的作者們說是根據(jù)rfc來的.

在上述代碼中,response.text 是requests庫返回響應的Unicode編碼內容

這樣,當我們去獲取一些中文網(wǎng)頁的響應內容時,且其響應頭部沒有charset信息,則response.text的編碼就會有問題(requests的json()方法也受這個編碼影響)

比如,我爬取百度的網(wǎng)頁的時候,其中文是utf-8編碼的

如下python2.7代碼

In [14]: a = '約' #utf-8編碼In [15]: aOut[15]: '/xe7/xba/xa6'In [22]: b=a.decode('ISO-8859-1')#response.text 認為響應內容是ISO-8859-1編碼,將其decode為UnicodeIn [23]: bOut[23]: u'/xe7/xba/xa6'In [26]: c=b.encode('utf8')#如果我們沒有注意ISO-8859-1,直接以utf8對其進行編碼In [27]: cOut[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庫里根據(jù)獲得響應內容來判斷編碼的函數(shù),參考文獻里有講到

python2的編碼還是很亂的 str可以是各種編碼,python3統(tǒng)一str為Unicode, byte可以是各種編碼

python2中encode后是str類型,decode后是Unicode類型,python3中encode后是byte類型,decode后是str類型(Unicode編碼)

用python3吧,下面是python3的代碼

In [13]: a = '約' #UnicodeIn [14]: type(a)Out[14]: strIn [15]: b=a.encode('utf8')In [16]: bOut[16]: b'/xe7/xba/xa6'In [17]: type(b)Out[17]: bytesIn [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]: strIn [29]: b'/xe7/xba/xa623,000'.decode('utf8')Out[29]: '約23,000'

socks5代理問題

現(xiàn)在的requests2.13.0的socks5代理我在使用的時候會出現(xiàn)問題,

我用的代理是shadowsocks,比如我想要訪問https://www.facebook.com 在向本地127.0.0.1:1080端口發(fā)送socks5請求時,我發(fā)現(xiàn)shadowsocks在向一個IP地址連接,連接不上,我用chrome連接Facebook的時候,我發(fā)現(xiàn)shadowsocks是在向www.facebook.com連接,能夠成功連接,應該是DNS解析問題,出現(xiàn)了重復解析的問題,使用requests2.12不會有這個問題,在github上也找到了相關的issue

import requestsheaders = {'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)

requests,socks5

requests,socks5

以上這篇解決Python requests庫編碼 socks5代理的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西宁市| 龙游县| 师宗县| 广昌县| 海阳市| 竹溪县| 罗城| 昌都县| 清远市| 白玉县| 自治县| 仪征市| 韶关市| 迭部县| 伊通| 六盘水市| 开封县| 许昌市| 孟津县| 沁水县| 郸城县| 太谷县| 泽州县| 博客| 湖南省| 喀喇沁旗| 龙门县| 伊通| 祁连县| 南开区| 手游| 奈曼旗| 遂川县| 奉新县| 桃园县| 工布江达县| 安达市| 资阳市| 屯留县| 清新县| 沾化县|