将相对 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.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'
复制粘贴:
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_relative
和 urllib.parse.uses_netloc
以包含您的方案,如果您希望它起作用。全局状态不太漂亮,但如果不修补标准库,我看不到任何其他方法。以上是关于将相对 url 路径解析为其绝对路径的主要内容,如果未能解决你的问题,请参考以下文章