【问题标题】:Concatenate base url and path using urllib使用 urllib 连接基本 url 和路径
【发布时间】:2019-04-02 17:06:15
【问题描述】:

我正在尝试使用 Python 3 的 urllib.parse 连接基本 URL url1 和相对路径 url2,但没有得到想要的结果。此外,我尝试使用os.path.join(不打算用于此目的)和简单的string concatenation using .format()

import os.path
import urllib.parse

url1 = "www.sampleurl.tld"
url2 = "/some/path/here"


print(urllib.parse.urljoin(url1, url2))
# --> "/some/path/here"

print(os.path.join(url1, url2))
# --> "/some/path/here"

print("{}{}".format(url1, url2))
# --> "www.sampleurl.tld/some/path/here" (desired output)

简单的字符串连接返回所需的绝对 url。但是,这种方法似乎很幼稚,也不是很优雅,因为它假定url2/ 开头,但情况可能并非如此。当然,我可以通过调用url2.startswith('/') 来检查这一点,并将字符串连接更改为"{}/{}".format(url1, url2) 以提供所需的灵活性,但我仍然想知道如何通过urllib.parse 以正确的方式做到这一点。

【问题讨论】:

    标签: python python-3.x url urllib urlparse


    【解决方案1】:

    urljoin 期望第一个参数 baseurl 包含架构。

    因此,在您的 url1 字符串中添加 https://http:// 应该可以完成这项工作。

    import urllib.parse
    
    url1 = "https://www.sampleurl.tld"
    url2 = "/some/path/here"
    
    
    print(urllib.parse.urljoin(url1, url2))
    # --> "https://www.sampleurl.tld/some/path/here"
    

    【讨论】:

      【解决方案2】:
      import urllib.parse
      
      url1 = 'www.sampleurl.tld'
      url2 = '/some/path/here'
      
      urlString = urllib.parse.ParseResult(scheme='https', netloc=url1, path=url2, params='', query='', fragment='')
      urllib.parse.urlunparse(urlString) 
      

      你可以试试这个。 URL 不是从列表创建的,而是从类 ParseResult 创建的。

      【讨论】:

        猜你喜欢
        • 2019-12-03
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 2019-07-08
        • 2014-03-03
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        相关资源
        最近更新 更多