使用urllib连接基本URL和路径

时间:2019-04-02 17:06:15

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

我正在尝试使用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)以提供所需的灵活性,但是我仍然想知道如何通过{{3 }}。

2 个答案:

答案 0 :(得分:0)

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

因此,在您的https://字符串中添加http://url1即可。

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"

答案 1 :(得分:0)

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类创建的。