本文主要介紹部分爬蟲在遇到
%u5317%u4eac%u70e4%u9e2d
這種相似unicode編碼的str
類型數據時,沒法直接使用decode('unicode-escape')
方法來轉成中文的時候,一個轉碼的解決方案,以及這個方案的思路!html
今天在爬一個網站的時候,遇到了一個網站,它的一些數據是經過ajax加載進來的一段json,它的value部分的內容是像下面這樣子的:python
%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22table-main%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22table-column%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%20class
複製代碼
!!! 這是給人類閱讀的嗎???ajax
明顯不是!!!json
不過這個天然是難不倒咱們,顯然是被urlencode轉碼了的嘛。所以經過urllib.parse.unquote即可以轉回人類可閱讀的形式了。網站
本覺得這樣即可以輕鬆拿到數據,結果一看後發現,仍是圖樣圖森破了。由於它的中文部分是這樣的:編碼
<td>%u5317%u4eac%u70e4%u9e2d</td>
複製代碼
WHAT ???
這是存心爲難我胖虎??url
不過不用太緊張,根據咱們的經驗,也能夠一眼就看出它是一段unicode編碼,只不過是將 \
反斜槓 被換成了 %
百分號。spa
那麼問題來了,咱們如何將一個str
類型的%u5317%u4eac%u70e4%u9e2d
編碼,轉換成另外一個str
類型的中文呢?code
在大量查閱了度娘以後,發現大部分的回答只是說如何將unicode編碼轉換成str,然而這個並不能解決咱們這裏遇到的問題。由於一段正常的unicode編碼,是能夠直接被python解釋器給解釋的,並不須要咱們作其餘的操做。例如:htm
In[2]:'\u5317\u4eac\u70e4\u9e2d'
Out[2]: '北京烤鴨'
複製代碼
在尋找直接將其轉換爲中文的方法的道路上被堵死後,萬般無奈,只好本身尋找一個解決方案。這裏的解決思路記錄以下:
In[3]: '北京烤鴨'.encode('unicode-escape')
Out[3]: b'\\u5317\\u4eac\\u70e4\\u9e2d'
複製代碼
In[4]: '北京烤鴨'.encode('unicode-escape').decode()
Out[4]: '\\u5317\\u4eac\\u70e4\\u9e2d'
複製代碼
%
百分號替換\\
雙反斜槓後,就獲得了被轉碼的unicode類型字符串了In[4]: '北京烤鴨'.encode('unicode-escape').decode().replace('\\','%')
Out[4]: '%u5317%u4eac%u70e4%u9e2d'
複製代碼
amazing!! 只須要3步,就實現了這個轉碼需求,原來如此的簡單!
那麼結果也就不言而喻了,只須要將這三步給逆向回去,也就能夠將一段unicode類型的str轉換成中文了。
那麼,開幹吧!
In[5]: '%u5317%u4eac%u70e4%u9e2d'.replace('%','\\').encode().decode('unicode-escape')
Out[5]: '北京烤鴨'
複製代碼
因此,一個查了幾個小時度娘也沒有解決的問題,經過這簡單的幾步就能夠解決了!!!