URL组成
以https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section3
为例
协议 | https |
---|---|
域名 | www.example.com |
端口号 | 8080 |
路径 | /path/to/resource |
参数 | param1=value1¶m2=value2 |
片段表示(锚点) | section3 |
提取URL各个部分
使用urllib.parse
来对url进行切分提取,提取出协议、主机+端口号、路径、参数:
# url地址切分
from urllib.parse import urlparse
url = 'https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section3'
# 先解析url字符串
parse_url = urlparse(url)
print(parse_url)
print('协议', parse_url.scheme)
print('主机+端口号', parse_url.netloc)
print('路径', parse_url.path)
print('参数', parse_url.query)
执行结果:
ParseResult(scheme='https', netloc='www.example.com:8080', path='/path/to/resource', params='', query='param1=value1¶m2=value2', fragment='section3')
协议 https
主机+端口号 www.example.com:8080
路径 /path/to/resource
参数 param1=value1¶m2=value2
可以看到
URL的编解码
因为url不能包含一些特殊字符串,例如空格,或者一些特殊的字符串,因此一般url的参数需要携带一些特殊符号传递时,会被编码成常规字符串,代码如下:
from urllib.parse import quote, unquote
url = 'https://example.com/?query=hello world¶m=42'
# url编码
print('编码后的url1', quote(url))
# url解码
print('解码后的url1', unquote(url))
执行结果:
编码后的url1 https%3A//example.com/%3Fquery%3Dhello%20world%26param%3D42
解码后的url1 https://example.com/?query=hello world¶m=42
URL参数解析为字典
有时URL参数会很多,所以从中提取某一个参数不是很方便,所以需要解析成python的字典数据类型,方便后续提取,代码如下:
from urllib.parse import urlencode, parse_qs
params = {
'param1': 'hello',
'param2': '123'
}
params = urlencode(params)
print('将字典编码为url字符串:', params)
print('将url字符串解码为python字典:', parse_qs(params))
运行结果:
将字典编码为url字符串: param1=hello¶m2=123
将url字符串解码为python字典: {'param1': ['hello'], 'param2': ['123']}
此处评论已关闭