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]。