编码与解码
encode()和decode()
- decode英文意思是 解码,encode英文原意 编码
- 字符串在Python内部的表示是unicode编码, 因此,在做编码转换时,通常需要以unicode作为中间编码
- decode()的作用是将其他编码的字符串转换成unicode编码
- encode()的作用是将unicode编码转换成其他编码的字符串
[详情参考](python中的encode()和decode()函数 - 年轻人——001 - 博客园 (cnblogs.com))
url编码
Url编码通常也被称为百分号编码,在Http协议中参数的传输是**“key=value"这种字典形式的,如果要传多个参数就需要用“&”**符号对键值对进行分割。如”?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。
对于Url中的不引起歧义的字符,编码和不编码是等价的,但是对于上面提到的这些字符,如果不经过编码,那么它们有可能会造成Url语义的不同。因此对于Url而言,只有普通英文字符和数字,特殊字符 $-.+!*’() 还有保留字符,才能出现在未经编码的Url之中。
歧义字符:
- 空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
- 空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
- #:通常用于表示书签或者锚点
- %:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
- %:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
URL编码在特殊字符的各个字节前加 % 后,服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。
如对url编码感兴趣,[参考](为什么要进行URL编码 - 降瑞雪 - 博客园 (cnblogs.com))
parse模块
parse 模块用于解析URL,支持对URL的操作包括拆分、拼接、编码、解码等
-
解析URL,支持对URL的操作包括拆分、拼接、编码、解码等
-
URL parsing(URL解析)
参考:https://blog.youkuaiyun.com/Wjf7496/article/details/109787586
-
URL quoting(URL引用)
参考:https://blog.youkuaiyun.com/Wjf7496/article/details/109813106
常见函数:
- urllib.parse.urlencode 将字典中key:value转换为key=编码后的value
- urllib.parse.quote将str数据转换为对应编码
- urllib.parse.unquote将编码后的数据转换为编码前数据
- 获取url参数;parse.urlparse(url)
urlparse参考
urllib.parse.urlparse(urlstring, scheme=’’, allow_fragments=True)
urlparse()函数用来解析url,返回一个包含以下这六个元素的属性
| 属性 | 索引 | 值 |
|---|---|---|
| scheme (协议) | 0 | URL方案说明符 |
| netloc (域名) | 1 | 网络位置部分 |
| path (路径) | 2 | 分层路径 |
| params (路径参数) | 3 | 最后一个路径元素的参数 |
| query (查询参数) | 4 | 查询组件 |
| fragment (片段) | 5 | 片段识别 |
parseResult = parse.urlparse(url)
#返回元组
(scheme='https', netloc='docs.python.org', path='/3.5/search.html', params='', query='q=parse&check_keywords=yes&area=default', fragment='')
param_dict=parse.parse_qs(parseResult.query)
{'q': ['parse'], 'check_keywords': ['yes'], 'area': ['default']}
param_dict['q'][0]
'parse'
#注意:加号会被解码,可能有时并不是我们想要的
- parse_qs()/parse_qsl()
分析url中query字段 该字段通过parse.urlsplit(url).query得到str类型的query字符串
urllib.parse.parse_qs():
返回字典 其中value是一个列表,保存url中query中相同key的所有value值
因此获取真正的value值还需要列表下标遍历 如query[key][0]
urllib.parse.parse_qsl()
返回列表 列表的每一个元素是一个仅含两个元素的元组
每个元组的第一个元素为dict的key,第二个元素为dict的value
-
urllib.parse.quote_plus 是在quote基础上强化了,
会编码 斜线为‘%2F’; 空格为‘ ’编码为‘+’ 等等
- urllib.parse.unquote_plus() 是在unquote基础上强化了
会解码 斜线为‘%2F’; 空格为‘ ’编码为‘+’ 等等
本文介绍了Python中encode()和decode()函数的作用,以及URL编码的规则和urllib.parse模块在URL解析、编码和解码中的应用。重点讲解了如何使用urllib.parse.urlencode(), quote(), unquote(), quote_plus()和unquote_plus()处理特殊字符和参数传递。
3311

被折叠的 条评论
为什么被折叠?



