當url中的查詢有特殊字符(不是url的保留字)時,需要進行編碼。當網址中有漢字時,需要特殊處理才能正確編碼。以下僅針對這種情況,當然也適用於純英文字符的URL。
(1) url編碼:
導入urllib
Url = 'wd=哈哈'?#如果這個網站的編碼是gbk,需要解碼,從gbk到unicode,再從Unicode到utf-8格式。
url = url.decode('gbk ',' replace ')
打印urllib.quote(url.encode('utf-8 ',' replace '))
結果:3a % 2f % 2f test . com % 2fs % 3fwd % 3d % E5 % 93% 88% E5 % 93% 88。
(2)網址解碼:
導入urllib
encoded _ URL = est . com % 2fs % 3fwd % 3d % E5 % 93% 88% E5 % 93% 88 '
打印urllib.unquote(encoded_url)。解碼(' utf-8 ','替換')。編碼(' gbk ',' replace ')?#依次
函數調用的參數和結果都是用utf-8編碼的,所以在對url進行編碼時,參數字符串的編碼需要從原來的編碼轉換成utf-8。
解碼url時,需要將解碼結果從utf-8轉換為原始編碼格式。
根據網站采用的不同編碼,要麽是gbk,要麽是utf-8,分配不同的編碼,進行不同的url轉碼。GBK格式,壹個漢字轉換成%xx%xx,* * *兩組;Utf-8格式,壹個漢字轉換成% xx% xx,* * *三組。
& gt& gt& gt?進口?sys,urllib?
?
& gt& gt& gt?s?=?杭州?
& gt& gt& gt?URL lib . quote(s . decode(sys . stdin . encoding)。編碼(' gbk '))
?
%BA%BC%D6%DD?
& gt& gt& gt?URL lib . quote(s . decode(sys . stdin . encoding)。編碼(' utf8 '))
?
%E6%9D%AD%E5%B7%9E '?
【python】?觀平原?復制
答?=?“墨西哥女孩四年被拐4萬次?嬰兒成為人質-搜狐新聞"?
打印?urllib.quote(urllib.quote(a))?
經過兩次編碼轉換後,將變成:% 25e 5% 25 a2 % 25 A8 % 25 E8 % 25 a5 % 25bf % 25e 5% 2593% 25 a5 % 25e 5% 25 a5 % 25 B3 % 25e 5% 25ad % 25 a9 % 25 E8 % 25 a2 % 25ab % 25e 6% 25e 6。.................................................................................這個表格。
同樣需要兩次解碼才能得到中文。
最近用python寫了壹個小爬蟲,可以自動下載壹些東西,但是網址裏面有中文,中文好像是gbk編碼然後轉換成url。例如,如果我有壹個名為“歷史人物”的unicode字符串。pdf”,我把它轉換成網址後會是什麽?
t = " % 20% E5 % 8E % 86% E5 % 8F % B2 % E4 % B8 % 8A % E9 % 82% A3 % E4 % BA % 9B % E7 % 89% 9B % E4 % BA % BA % E4 % BB % AC . pdf ",?
但是,另壹個網站給出了S = " % C0 % FA % CA % B7 % C9 % CF % C4 % C7 % D0 % A9 % C5 % A3 % C8 % CB % C3 % C7。PDF”。
& gt& gt& gt打印URL lib . un quote(" % C0 % FA % CA % B7 % C9 % CF % C4 % C7 % D0 % A9 % C5 % A3 % C8 % CB % C3 % C7。PDF”)。解碼(' gbk ')。編碼(“utf-8”)
& gt& gt& gt歷史上那些牛人。便攜文檔格式