亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-08-05 10:34:08 來源:億速云 閱讀:151 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何解決Python requests庫編碼socks5代理的問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

編碼問題

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代理的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹凤县| 淄博市| 隆德县| 皋兰县| 铜山县| 台湾省| 大理市| 安西县| 马尔康县| 大冶市| 清河县| 正宁县| 白山市| 大英县| 武邑县| 柘荣县| 建始县| 巩留县| 荥阳市| 崇阳县| 香格里拉县| 白水县| 大同县| 晋城| 西丰县| 烟台市| 安达市| 正蓝旗| 航空| 大新县| 蓬莱市| 屏边| 曲阜市| 四会市| 乌兰浩特市| 永修县| 井陉县| 从化市| 怀化市| 油尖旺区| 大理市|