【问题标题】:Resolving a relative url path to its absolute path将相对 url 路径解析为其绝对路径
【发布时间】: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'

【问题讨论】:

    标签: python url path


    【解决方案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 以包含您的方案,如果您希望它起作用。全局状态不太漂亮,但如果不修补标准库,我看不到任何其他方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2011-06-30
      • 2012-01-31
      • 2017-08-01
      相关资源
      最近更新 更多