为什么要进行url编码
url带参数的请求格式为(举例): http://www.baidu.com/s?k1=v1&k2=v2
参数中包含中文或者?、=等特殊符号时,通过url编码,将data转化为特定格式, 将中文和特殊符号进行编码,避免发生歧义.
另外,当请求数据为字典data = {k1:v1, k2:v2}时,可以通过编码转换为k1=v1&k2=v2
url编码
from urllib import parse
from urllib import request
url = 'http://www.baidu.com/s?'
dict1 ={'wd': '百度翻译'}
url_data = parse.urlencode(dict1) # unlencode()将字典{k1:v1,k2:v2}转化为k1=v1&k2=v2
print(url_data) # wd=%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91
data = request.urlopen((url+url_data)).read() #读取url响应结果
data = data.decode('utf-8') #将响应结果用utf8编码
# print(data)
url_org = parse.unquote(url_data) #解码url
print(url_org) # wd=百度翻译
对字符串编码时,有两种方式:
- parse.quote(s, safe=’/’)
接受参数s为字符串,safe是指定某字符不被urlencode,默认为’/’,
如指定’+’、’/’不需转换,传 ‘+/’ 和 ‘+ /’ 均可。另外此方法会将“空格”转换为“%20” - parse.quote_plus(s, safe=”)
它比quote多一些功能,会将空格(“”)转换成加号(“+”),默认safe为空字符。
str1 = 'ha ha哈/哈#'
#将字符串进行编码
str2 = parse.quote(str1)
print(str2) #ha%20ha%E5%93%88/%E5%93%88%23
str3 = parse.quote_plus(str1)
print(str3) # ha+ha%E5%93%88%2F%E5%93%88%23
#解码字符串
str4 = parse.unquote(str1)
print(str4) # ha ha哈/哈#
str5 = parse.unquote_plus(str3)
print(str5) # ha ha哈/哈#