Python urllib.parse
模块中的 urljoin
方法
urljoin
是 Python 标准库中 urllib.parse
模块的一个方法,用于将基础 URL 和相对路径拼接成完整的 URL。它会根据传入的基础 URL 自动处理协议、域名以及路径的部分匹配逻辑。
以下是关于该方法的具体说明和示例:
方法定义
urllib.parse.urljoin(base, url, allow_fragments=True)
- base: 基础 URL,通常是一个完整的 URL 地址。
- url: 需要拼接到基础 URL 上的目标地址,可以是绝对路径或相对路径。
- allow_fragments: 是否允许片段标识符(默认为 True)。如果设置为 False,则忽略任何片段标识符 [#fragment]。
功能描述
当调用 urljoin
时,目标 URL 如果是以 /
开头的相对路径,则会被视为相对于基础 URL 的根目录;如果是不带 /
的相对路径,则会在当前路径下追加[#3]。
示例代码
以下是一些常见的使用场景及其对应的输出结果:
import urllib.parse# 基础 URL
base_url = "https://www.example.com/path/to/resource"# 绝对路径替换
result_1 = urllib.parse.urljoin(base_url, "/new_path")
print(result_1) # 输出:https://www.example.com/new_path# 相对路径追加
result_2 = urllib.parse.urljoin(base_url, "subpath/file.html")
print(result_2) # 输出:https://www.example.com/path/to/subpath/file.html# 完整 URL 替代
result_3 = urllib.parse.urljoin(base_url, "http://differentdomain.com/")
print(result_3) # 输出:http://differentdomain.com/# 同级目录跳转
result_4 = urllib.parse.urljoin(base_url, "../another_resource")
print(result_4) # 输出:https://www.example.com/path/another_resource# 片段保留
result_5 = urllib.parse.urljoin(base_url, "#section1")
print(result_5) # 输出:https://www.example.com/path/to/resource#section1
以上示例展示了不同情况下 urljoin
的行为模式,包括绝对路径覆盖、相对路径追加、跨域替代以及片段操作等[#2]。
注意事项
- 当目标 URL 已经包含协议(如 http 或 https),则不会继承基础 URL 的协议部分。
- 若目标 URL 不含协议但含有主机名,则仅保留主机名而丢弃基础 URL 的其余部分。
- 对于复杂的相对路径计算(如 …/ 表示上级目录),
urljoin
能够自动解析并生成正确的最终路径[#1]。