URL组成

https://www.example.com:8080/path/to/resource?param1=value1&param2=value2#section3 为例

协议https
域名www.example.com
端口号8080
路径/path/to/resource
参数param1=value1&param2=value2
片段表示(锚点)section3

接下来用Python来实现一些url的解析和处理。

提取URL各个部分

使用urllib.parse来对url进行切分提取,提取出协议、主机+端口号、路径、参数:

# url地址切分
from urllib.parse import urlparse

url = 'https://www.example.com:8080/path/to/resource?param1=value1&param2=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&param2=value2', fragment='section3')
协议 https
主机+端口号 www.example.com:8080
路径 /path/to/resource
参数 param1=value1&param2=value2

可以看到

URL的编解码

因为url不能包含一些特殊字符串,例如空格,或者一些特殊的字符串,因此一般url的参数需要携带一些特殊符号传递时,会被编码成常规字符串,代码如下:

from urllib.parse import quote, unquote

url = 'https://example.com/?query=hello world&param=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&param=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&param2=123
将url字符串解码为python字典: {'param1': ['hello'], 'param2': ['123']}
最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏