【问题标题】:How to build URLs in Python [closed]如何在 Python 中构建 URL [关闭]
【发布时间】:2013-04-03 22:56:11
【问题描述】:

我需要知道如何在 python 中构建 URL,例如:

http://subdomain.domain.com?arg1=someargument&arg2=someotherargument

您会推荐使用哪个库,为什么?这种库有“最佳”选择吗?

另外,您能否提供我开始使用该库的示例代码?

【问题讨论】:

  • Requests (docs.python-requests.org/en/latest) 一般推荐,但它不是内置模块。
  • 没关系,我要的是任何库,不管它是不是内置的。谢谢!
  • ParseResult(scheme='https', netloc='example.com', path='path', params='', query='', fragment='').geturl()

标签: python


【解决方案1】:

我会选择 Python 的 urllib,它是一个内置库。

Python 2

import urllib
url = 'https://example.com/somepage/?'
params = {'var1': 'some data', 'var2': 1337}
print(url + urllib.urlencode(params))

Python 3

import urllib.parse
url = 'https://example.com/somepage/?'
params = {'var1': 'some data', 'var2': 1337}
print(url + urllib.parse.urlencode(params))

输出:

https://example.com/somepage/?var1=some+data&var2=1337

【讨论】:

  • urllib.urlencode(getVars)
  • 不要在 python 中将字符串与+ 连接。试试"{}{}".format(url, querystring)
  • 我有点同意,但这是一种权衡。在这种情况下,我认为使用 + 进行连接没有任何问题,而且由于 Python 2 甚至没有使用 + 的速度损失。但是,如果您想完全遵守 PEP8 标准 - 并通过它获得交叉兼容性/稳定性,最好使用 format()、append() 和 join()。
  • @chjortlund .. 我们可以将数据帧输出转换为 URL。以 url 的形式显示数据帧表输出:任何人都可以访问它?
【解决方案2】:

python 标准库中的urlparse 是关于构建有效 url 的。查看 urlparse 的文档

【讨论】:

  • 特别是urlunparse 或不拆分以构建一个url
  • urlparse 自 python 3 起已移至 urllib.parse:docs.python.org/3.5/library/…
  • 例如urllib.parse.urlunparse(('http', 'example.com', '/path', None, 'a=1', 'fragment')).
  • 这个库只给你最原始的组件来构建一个有效的 URL;您必须了解如何组装这些组件。例如,urlunparse 接受一个“netloc”,即“username:password@host:port”,并且您需要对密码和字符串进行 URL 编码并将其插入“netloc”字符串(否则密码包含常见的特殊字符会破坏你的程序)。同样,您必须将查询字典转换为字符串,注意适当地进行 URL 编码。如果您正在寻找一个健全的库来构建有效的 URL,这不是它。
  • @Senthil Kumaran,我们可以将数据帧输出转换为 URL。以 url 的形式显示数据帧表输出:任何人都可以访问它?
【解决方案3】:

这里是使用urlparse 生成 URL 的示例。这为向 URL 添加路径提供了便利,而无需担心检查斜杠。

import urllib

def build_url(base_url, path, args_dict):
    # Returns a list in the structure of urlparse.ParseResult
    url_parts = list(urllib.parse.urlparse(base_url))
    url_parts[2] = path
    url_parts[4] = urllib.parse.urlencode(args_dict)
    return urllib.parse.urlunparse(url_parts)

>>> args = {'arg1': 'value1', 'arg2': 'value2'}
>>> # works with double slash scenario
>>> build_url('http://www.example.com/', '/somepage/index.html', args)

http://www.example.com/somepage/index.html?arg1=value1&arg2=value2

# works without slash
>>> build_url('http://www.example.com', 'somepage/index.html', args)

http://www.example.com/somepage/index.html?arg1=value1&arg2=value2

【讨论】:

  • 我一直在使用一个名为 yarl 的库,它与 URL 配合得很好。它非常pythonic,支持运算符/加入路径,就像pathlib一样。
【解决方案4】:
import urllib

def make_url(base_url , *res, **params):
    url = base_url
    for r in res:
        url = '{}/{}'.format(url, r)
    if params:
        url = '{}?{}'.format(url, urllib.urlencode(params))
    return url

print make_url('http://example.com', 'user', 'ivan', alcoholic='true', age=18)

输出:

http://example.com/user/ivan?age=18&alcoholic=true

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2014-09-26
    • 2017-07-21
    • 2010-12-28
    • 2022-01-24
    • 2015-10-12
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多