我有一个简单的怀疑.. 我正在尝试使用urljoin加入字符串的三个部分..
host = "http://foo.com:port"
ver = "/v1"
exten = "/path"
我想使用urljoin来生成url,而不是使用host + ver + exten
但urljoin正在给予
http://foo.com:poort/v1
(如果我尝试urljoin(host,ver,exten)
)
答案 0 :(得分:2)
urljoin
的工作方式是将基本网址与其他网址相结合。您可以尝试使用简单的字符串组合连接相对路径,然后使用urljoin
加入主机和组合的相对路径。
像:
rel = ver + exten
url = urljoin(host, rel)
遗憾的是,如果要组合多个URL路径,则必须使用其他库。如果您使用的是非Windows机器,则可以使用os.path模块将它们连接在一起,就像组合本地文件路径一样。
答案 1 :(得分:2)
这是一个非常古老的问题,但是由于很多人将来会遇到这个问题,这里有一种方法可以在linux上实现:
import urlparse
import os
def url_join(host, version, *additional_path):
return urlparse.urljoin(host, os.path.join(version, *additional_path))
然后调用此函数:
>> url_join("http://foo.com:port", "v1", "path1", "path2", "path3")
>> 'http://foo.com:port/v1/path1/path2/path3
答案 2 :(得分:-1)
您也可以递归加入零件清单:
def urljoin(parts):
if len(parts) > 1:
parts = [urllib.parse.urljoin(parts[0], parts[1])] + parts[2:]
return urljoin(parts)
return parts[0]
使用这样的功能:
parts = [
'https://stackoverflow.com/',
'questions/24814657/',
'how-to-do-url-join-in-python-using-multiple-parameters/',
'41756140#41756140',
]
print(urljoin(parts))
# https://stackoverflow.com/questions/24814657/how-to-do-url-join-in-python-using-multiple-parameters/41756140#41756140
请注意,urllib.parse.urljoin()
的行为与@AnukuL提到的os.path.join()
略有不同。