如何用Python向URL查询字符串添加自定义参数?

30 投票
4 回答
24164 浏览
提问于 2025-04-16 07:41

我需要用Python给一个网址的查询字符串添加自定义参数。

举个例子:这是浏览器正在获取的网址(GET请求):

/scr.cgi?q=1&ln=0

然后执行一些Python命令,最后我需要在浏览器中设置以下网址:

/scr.cgi?q=1&ln=0&SOMESTRING=1

有没有什么标准的方法可以做到这一点?

4 个回答

2

你可以使用Python的一个网址处理库,叫做furl

import furl
f =  furl.furl("/scr.cgi?q=1&ln=0")  
f.args['SOMESTRING'] = 1
print(f.url)
9

使用 urlsplit() 来提取网址中的查询字符串,也就是问号后面的部分。接着用 parse_qsl() 来解析这个查询字符串(如果你不在乎参数的顺序,可以用 parse_qs())。然后添加你想要的新参数。接下来,使用 urlencode() 把它转换回查询字符串。最后,用 urlunsplit() 把所有部分合并成一个完整的网址,然后把用户重定向到这个新网址。

72

你可以使用 urlsplit()urlunsplit() 来拆分和重建一个网址。然后可以对解析出来的查询字符串使用 urlencode()

from urllib import urlencode
from urlparse import parse_qs, urlsplit, urlunsplit

def set_query_parameter(url, param_name, param_value):
    """Given a URL, set or replace a query parameter and return the
    modified URL.

    >>> set_query_parameter('http://example.com?foo=bar&biz=baz', 'foo', 'stuff')
    'http://example.com?foo=stuff&biz=baz'

    """
    scheme, netloc, path, query_string, fragment = urlsplit(url)
    query_params = parse_qs(query_string)

    query_params[param_name] = [param_value]
    new_query_string = urlencode(query_params, doseq=True)

    return urlunsplit((scheme, netloc, path, new_query_string, fragment))

使用方法如下:

>>> set_query_parameter("/scr.cgi?q=1&ln=0", "SOMESTRING", 1)
'/scr.cgi?q=1&ln=0&SOMESTRING=1'

撰写回答