在Python中将基础URL与另一个URL连接

2025年3月13日 | 阅读 5 分钟

基础 URL

基础 URL 是网站或资源的主地址。它作为构建其他相对 URL 的基础。可以将其视为所有其他 URL 分支出来的根。通常,基础 URL 包含域名(如 `example.com`),有时还包含子目录或路径。

基础 URL 示例

关键点

  • 基础 URL 通常是网站或 API 的主地址。
  • 它可以包含协议,如 `https://` 或 `http://`。
  • 它作为基础,与相对 URL 结合时可以构建完整的 URL。

相对 URL

相对 URL 是指网站上某个资源的 URL,但不包含完整路径。它“相对”于基础 URL。这意味着它只指定相对于当前页面或域的路径或资源,而不是提供整个 Web 地址。

相对 URL 示例

与基础 URL 结合时,完整 URL 为

关键点

  • 相对 URL 依赖于基础 URL 来获取上下文。
  • 它可以指向站点的不同部分(例如,`/products`、`/contact`)。
  • 它不包含协议(`https://`)或域名(`facebook.com`)。

将基础 URL 与其他 URL 连接

在 Python 中处理 URL 时,特别是在进行网络抓取或与 API 通信等任务时,将基础 URL 与相对 URL 连接是一个常见过程。Python 提供了多种方法来处理这个问题。

使用 `urllib.parse.urljoin()`

这是最可靠的方法,因为它专门用于组合 URL。

代码

输出

 
https://#/login   

说明

  • 导入 {urljoin}:导入 `urllib.parse` 模块的 `urljoin` 函数。此函数用于将相对 URL 与基础 URL 连接起来。
  • 定义 URL:指定字符串 "base_url" 和 "relative_url"。`relative_url` 指定了资源路径,而 `base_url` 包含一个尾部斜杠。
  • URL 组合:`urljoin(base_url, relative_url)` 连接相对 URL 和基础 URL。它确保正确处理任何多余或缺失的斜杠,并生成一个有效的 URL。
  • 输出:打印生成的 `full_url`,该 URL 将两个 URL 合并为 `https://#/login`。

优点

  • 自动调整:处理缺失或多余的斜杠。
  • 代码更清晰:使代码更具可读性。
  • 错误更少:避免常见的 URL 格式化错误。

缺点

  • 需要导入:需要额外导入 `urllib.parse` 模块。

手动字符串拼接

我们可以使用 Python 的字符串操作手动拼接基础 URL 和相对 URL。但是,此方法需要仔细处理斜杠。

代码

输出

 
https://www.github.com/explore   

说明

  • 定义 URL:指定字符串 "base_url" 和 "relative_url"。`relative_url` 指定了资源路径,而 `base_url` 包含一个尾部斜杠。
  • 确保格式正确:`if` 语句确定 `base_url` 的结尾是否为斜杠(`/`)。如果不是,则附加一个斜杠,以避免在基础 URL 和相对 URL 之间缺少斜杠。
  • 组合 URL:使用 `+` 拼接基础 URL 和相对 URL。这将创建一个完整的 URL,其中包含基础路径后跟资源路径。
  • 输出:打印组合后的 URL `https://www.github.com/explore`。

优点

  • 无需导入:不依赖任何外部模块。
  • 简单:易于理解并在小型脚本中使用。

缺点

  • 易出错:容易出现人为错误,例如添加或遗漏斜杠。
  • 难以扩展:不适合大型项目或复杂的 URL 结构。

使用 `os.path.join()`

尽管 `os.path.join()` 用于文件路径,但一些开发人员可能会尝试使用它来连接 URL。它的工作方式类似于 `urljoin()`,但它不是为 URL 设计的。

代码

输出

 
https://www.twitter.com/home   

说明

  • 导入 `os.path.join`:`os.path.join` 函数由 `os` 模块提供,`join` 方法的目的是将一个或多个字符串连接到另一个字符串。此函数通常用于拼接文件路径。
  • 定义 URL:在代码中,将变量 `base_url` 和 `relative_url` 声明为字符串类型。接收到的 `base_url` 是一个以斜杠结尾的字符串,而 `relative_url` 是指向资源的路径。
  • 组合 URL:`os.path.join(base_url, relative_url)` 是尝试连接两个 URL 的函数。然而,此方法是为文件路径设计的,而不是为 URL 设计的。
  • 输出:打印生成的 `full_url`。尽管在此情况下有效,但它可能无法正确处理所有 URL 特定的场景。

优点

  • 简单:工作方式类似于连接文件路径,一些开发人员可能对此比较熟悉。

缺点

  • 非为 URL 设计:它是为文件路径设计的,而不是为 URL 设计的。
  • 不一致:如果与包含查询字符串、片段或不寻常格式的 URL 一起使用,可能会产生不正确的结果。

使用 `f-strings` 或 `format()`(手动拼接)

连接 URL 的另一种方法是使用 Python 的 f-strings 或 `.format()` 进行字符串插值。这种方法类似于手动拼接,但更简洁一些。

代码

输出

 
https://tpointtech.cn/python-tutorial   

说明

  • 定义 URL:请注意,`base_url` 和 `relative_url` 都是字符串。`base_url` 在最后一个斜杠之前结束,而 `relative_url` 指向一个资源。
  • 使用 f-strings:`f-string` 方法也用于格式化最终 URL。`.rstrip("/")` 确保 `base_url` 字符串在斜杠后没有多余的斜杠。通过使用 `lstrip("/")` 方法移除 `relative_url` 中的前导斜杠,实现了第一部分。
  • 组合 URL:当使用 `f-string` 拼接清理后的基础 URL 和相对链接时,两者之间的组合将始终有一个斜杠。
  • 输出:打印生成的 URL `https://tpointtech.cn/python-tutorial`。

优点

  • 更多控制:为开发人员提供了对 URL 连接方式的更多控制。
  • 比拼接更简洁:比传统拼接更容易阅读和编写。

缺点

  • 手动处理:仍然需要仔细处理斜杠,这可能导致错误。
  • 冗长:比使用 `urljoin()` 更复杂。