在 Python 中加入一个基本 URL 和另一个 URL
Join a base URL with another URLs in Python
使用模块中的urljoin
方法urllib.parse
将基本 URL 与另一个 URL 连接起来,例如result = urljoin(base_url, path)
. 该urljoin
方法通过将基本 URL 与另一个 URL 组合来构造完整(绝对)URL。
主程序
from urllib.parse import urljoin base_url = 'https://example.com' path = 'images/static/cat.jpg' result = urljoin(base_url, path) # 👇️ https://example.com/images/static/cat.jpg print(result) # 👇️ /global/images/static/dog.png print(urljoin('/global/images/', 'static/dog.png'))
如果您有多个 URL 组件,请posixpath
在将它们传递给urljoin()
方法之前使用模块将它们连接起来。
主程序
import posixpath from urllib.parse import urljoin base_url = 'https://example.com' path_1 = 'images' path_2 = 'static' path_3 = 'cat.jpg' path = posixpath.join(path_1, path_2, path_3) print(path) # 👉️ 'images/static/cat.jpg' result = urljoin(base_url, path) # 👇️ https://example.com/images/static/cat.jpg print(result)
urllib.parse.urljoin
方法将一个基本 URL 和另一个 URL 作为参数,并通过组合它们来构造一个完整的(绝对)URL 。
您还可以使用该urljoin
方法来加入 URL 路径组件。
主程序
from urllib.parse import urljoin # 👇️ /global/images/static/dog.png print(urljoin('/global/images/', 'static/dog.png'))
确保您获得的输出符合您的预期,因为在urljoin
处理不以正斜杠结尾的 URL 组件时,该方法可能会有点混乱/
。
这是一个例子。
主程序
from urllib.parse import urljoin # 👇️ /global/static/dog.png print(urljoin('/global/images', 'static/dog.png'))
images
请注意,该方法在加入第二个组件之前从第一个组件中剥离。
当第一个组件以正斜杠结尾时,该方法的行为符合预期。
主程序
from urllib.parse import urljoin # 👇️ /global/images/static/dog.png print(urljoin('/global/images/', 'static/dog.png'))
如果第二个组件以正斜杠开头,您可能还会注意到令人困惑的行为。
主程序
from urllib.parse import urljoin # 👇️ /static/dog.png print(urljoin('/global/images', '/static/dog.png'))
当第二个组件以正斜杠开始时,假定它从根开始。
该posixpath.join()
方法更具可预测性,也可用于连接 URL 路径组件。
主程序
import posixpath # 👇️ /global/images/static/dog.png print(posixpath.join('/global/images', 'static/dog.png')) # 👇️ /global/images/static/dog.png print(posixpath.join('/global/images/', 'static/dog.png')) # 👇️ /static/dog.png print(posixpath.join('/global/images', '/static/dog.png'))
该posixpath.join
方法也可以传递超过 2 个路径。
主程序
import posixpath # 👇️ /global/images/static/dog.png print(posixpath.join('/global', 'images', 'static', 'dog.png'))