Добавить параметры для данного URL в Python - PullRequest
98 голосов
/ 24 марта 2010

Предположим, мне дали URL.
Возможно, у него уже есть параметры GET (например, http://example.com/search?q=question) или нет (например, http://example.com/).

И теперь мне нужно добавить некоторые параметры, например {'lang':'en','tag':'python'}. В первом случае у меня будет http://example.com/search?q=question&lang=en&tag=python, а во втором - http://example.com/search?lang=en&tag=python.

Есть ли стандартный способ сделать это?

Ответы [ 14 ]

3 голосов
/ 17 октября 2012

Еще один ответ:

def addGetParameters(url, newParams):
    (scheme, netloc, path, params, query, fragment) = urlparse.urlparse(url)
    queryList = urlparse.parse_qsl(query, keep_blank_values=True)
    for key in newParams:
        queryList.append((key, newParams[key]))
    return urlparse.urlunparse((scheme, netloc, path, params, urllib.urlencode(queryList), fragment))
3 голосов
/ 24 марта 2010

Используйте различные функции urlparse, чтобы разделить существующий URL, urllib.urlencode() в объединенном словаре, затем urlparse.urlunparse(), чтобы снова собрать все вместе. 1008 *

Или просто возьмите результат urllib.urlencode() и соответствующим образом объедините его с URL.

1 голос
/ 08 августа 2012

Вот как я это реализовал.

import urllib

params = urllib.urlencode({'lang':'en','tag':'python'})
url = ''
if request.GET:
   url = request.url + '&' + params
else:
   url = request.url + '?' + params    

работал как шарм. Тем не менее, мне бы хотелось более чистый способ реализовать это.

Другой способ реализации вышесказанного заключается в методе.

import urllib

def add_url_param(request, **params):
   new_url = ''
   _params = dict(**params)
   _params = urllib.urlencode(_params)

   if _params:
      if request.GET:
         new_url = request.url + '&' + _params
      else:
         new_url = request.url + '?' + _params
   else:
      new_url = request.url

   return new_ur
1 голос
/ 24 января 2011

В питоне 2.5

import cgi
import urllib
import urlparse

def add_url_param(url, **params):
    n=3
    parts = list(urlparse.urlsplit(url))
    d = dict(cgi.parse_qsl(parts[n])) # use cgi.parse_qs for list values
    d.update(params)
    parts[n]=urllib.urlencode(d)
    return urlparse.urlunsplit(parts)

url = "http://stackoverflow.com/search?q=question"
add_url_param(url, lang='en') == "http://stackoverflow.com/search?q=question&lang=en"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...