将相对 url 路径解析为其绝对路径

Posted

技术标签:

【中文标题】将相对 url 路径解析为其绝对路径【英文标题】:Resolving a relative url path to its absolute path 【发布时间】:2010-10-03 08:30:14 【问题描述】:

python 中有这样的库吗?

>>> resolvePath("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'

【问题讨论】:

【参考方案1】:

您也可以通过 Python 的 requests 库调用 urljoin 函数。

这段代码:

import requests

requests.compat.urljoin('http://example.com/foo.html', 'bar.html')

将返回值http://example.com/bar.html

【讨论】:

【参考方案2】:

是的,有urlparse.urljoinurllib.parse.urljoin 用于 Python 3。

>>> try: from urlparse import urljoin # Python2
... except ImportError: from urllib.parse import urljoin # Python3
...
>>> urljoin("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'

复制粘贴:

try:
    from urlparse import urljoin  # Python2
except ImportError:
    from urllib.parse import urljoin  # Python3

【讨论】:

对于 RFC 3986 和 unicode 兼容的替换,请参阅 uritools。 遗憾的是,如果第二个组件是绝对的,这将不起作用。例如,urljoin("http://example.com/blah.html", "./././whoa.html") 删除点,而 urljoin("http://example.com/blah.html", "/./././whoa.html") 不会。 请注意,这仅限于一组硬编码的方案。如果您使用的是自定义/不受欢迎的方案,则需要修改 urllib.parse.uses_relativeurllib.parse.uses_netloc 以包含您的方案,如果您希望它起作用。全局状态不太漂亮,但如果不修补标准库,我看不到任何其他方法。

以上是关于将相对 url 路径解析为其绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

node rename绝对路径

绝对路径与相对路径解析

相对表单操作解析为绝对 URL?

相对路径与绝对路径特殊例子解析

从相对路径和/或文件名解析绝对路径

相对〜绝对url的相对路径的一般解决方案?