urlencode()、quote()、unquote()
urlencode 的參數是詞典,它可以將key-value這樣的鍵值對轉換成我們想要的格式
urlencode 對字典或由兩元素元組組成的列表進行碼編碼,將其轉換為符合url規范的查詢字符串
quote() 對string進行編碼(只對一個字符串進行urlencode轉換)
quote 對非ASCII編碼的字符進行編碼,默認進行UTF-8編碼,不對“/”進行編碼;(,errors=‘strict’(如果不能對string進行編碼,rasie 引發一個 UnicodeEncodeErrort 錯誤)) 一般對請求url路徑中非ASCII編碼的字符(string)進行編碼
url 請求鏈接不能包含非ASCII編碼的字符,非ASCII編碼的字符被認為是不安全的,所以進行編碼。
safe = “/”,說明“/”是安全的,不用進行編碼.。
url 中保留的字符:在url 中都認為是安全的可以不進行編碼,safe包含的字符都不會被編碼。
注意:dict格式轉換為dict 編碼與字符串編碼不一致
a = {"name":"zhangsan"} b = quote(str(a)) c = '{"name":"zhangsan"}' d = quote(c) print(a) print(b) print(c) print(d)
運行結果
unquote() 對url進行解碼,把類似"%xx"的字符替換成單個字符
data_dict = {"name": "wangjia", "address": "北京市西城區", "url": "https://www.baidu.com"} undata_dict = "%7B%27name%27%3A%20%27wangjia%27%2C%20%27address%27%3A%20%27%E5%8C%97%E4%BA%AC%E5%B8%82%E8%A5%BF%E5%9F%8E%E5%8C%BA%27%2C%20%27url%27%3A%20%27https%3A//www.baidu.com%27%7D" # 對url進行編碼 data_q = urllib.parse.quote(str(data_dict)) print("編碼:", data_q) # 對url進行解碼 unresult = urllib.parse.unquote(undata_dict) print("解碼: ", unresult) # 將URL中的鍵值對以連接符&划分 key_value_data = urllib.parse.urlencode(data_dict) print("編碼:", key_value_data)
編碼: %7B%27name%27%3A%20%27wangjia%27%2C%20%27address%27%3A%20%27%E5%8C%97%E4%BA%AC%E5%B8%82%E8%A5%BF%E5%9F%8E%E5%8C%BA%27%2C%20%27url%27%3A%20%27https%3A//www.baidu.com%27%7D
解碼: {'name': 'wangjia', 'address': '北京市西城區', 'url': 'https://www.baidu.com'}
編碼: name=wangjia&address=%E5%8C%97%E4%BA%AC%E5%B8%82%E8%A5%BF%E5%9F%8E%E5%8C%BA&url=https%3A%2F%2Fwww.baidu.com
進程已結束,退出代碼為 0
拓展:from urllib.parse import urlparse, urlsplit
urlparse()
可以將 URL 解析成 ParseResult 對象。對象中包含了六個元素
urlsplit()
urlsplit() 函數也能對 URL 進行拆分,urlsplit() 並不會把 路徑參數(params) 從 路徑(path) 中分離出來。在不能使用urlparse()時 使用此函數。