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

Eri*_*arr 58 python url path

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'
Run Code Online (Sandbox Code Playgroud)

Jam*_*ady 101

是的,有urlparse.urljoin,或urllib.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'
Run Code Online (Sandbox Code Playgroud)

用于复制和粘贴:

try:
    from urlparse import urljoin  # Python2
except ImportError:
    from urllib.parse import urljoin  # Python3
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅限于一组硬编码的方案。如果您使用的是自定义/不流行的方案,如果您希望它起作用,则需要修改“urllib.parse.uses_relative”和“urllib.parse.uses_netloc”以包含您的方案。关于全局状态不太漂亮,但我没有看到任何其他方法可以在不修补标准库的情况下做到这一点。 (2认同)

Pik*_*er2 9

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

这段代码:

import requests

requests.compat.urljoin('http://example.com/foo.html', 'bar.html')
Run Code Online (Sandbox Code Playgroud)

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