如何使用多个参数在python中加入url

时间:2014-07-17 22:37:06

标签: python

我有一个简单的怀疑..    我正在尝试使用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)

3 个答案:

答案 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()略有不同。