Python3 Requests 模塊請求內容包含中文報錯的解決辦法

0x00 前言

最近在寫一個爬蟲代碼,裡面需要使用 get 傳參中文,但是如果直接使用中文而不對其編碼的話,程序將會報錯。

<code>UnicodeEncodeError: 'latin-1' codec can't encode characters in position 38-39: ordinal not in range(256)
/<code>

0x01 網上的一些解決辦法

參考網上的解決辦法,比如下面的幾種辦法。

<code>1、在中文後加上".encode('GBK')"
2、在文件頭部加上"#coding = utf-8"
3、在中文後加上".encode('utf-8')"
/<code>

這幾種方法在我這裡都行不通,抓包也可以看到數據包裡的中文並不是我們想象的經過 URL 編碼的字符。

<code>GET /test=b'%5Cxe6%5Cxb5%5Cx8b%5Cxe8%5Cxaf%5Cx95' HTTP/1.1
/<code>

0x02 可行的辦法

最後才意識到,其實並不需要對中文進行 GBK、UTF-8 轉碼,而應該對其進行 URL 編碼。

<code>from urllib.parse import quote
text = quote("測試", 'utf-8')
/<code>

利用 quote 函數對 “測試” 進行 URL 編碼後,再次抓包可以看到中文部分已經是 URL 格式了。

<code>GET /test=%E6%B5%8B%E8%AF%95 HTTP/1.1
/<code>

此時,程序也不再報錯,可以順利執行了。


分享到:


相關文章: