Pythonを使ってURLクエリ文字列にカスタムパラメータを追加する必要があるPythonでURLクエリ文字列にカスタムパラメータを追加する方法は?
例: これはブラウザが取得しているURLです(GET):
/scr.cgi?q=1&ln=0
次にいくつかのpythonコマンドが実行されます。結果ブラウザで次のURLを設定する必要があります。
/scr.cgi?q=1&ln=0&SOMESTRING=1
標準的なアプローチはありますか?
Pythonを使ってURLクエリ文字列にカスタムパラメータを追加する必要があるPythonでURLクエリ文字列にカスタムパラメータを追加する方法は?
例: これはブラウザが取得しているURLです(GET):
/scr.cgi?q=1&ln=0
次にいくつかのpythonコマンドが実行されます。結果ブラウザで次のURLを設定する必要があります。
/scr.cgi?q=1&ln=0&SOMESTRING=1
標準的なアプローチはありますか?
使用urlsplit()
(あなたは引数の順番を気にしない場合はparse_qs()
をか)parse_qsl()
に戻って、それを回すために、新しい引数を追加し、urlencode()
をそれを解析するために、クエリ文字列を抽出しますクエリー文字列urlunsplit()
を使用して1つのURLに戻し、クライアントをリダイレクトします。
import urllib
url = "/scr.cgi?q=1&ln=0"
param = urllib.urlencode({'SOME&STRING':1})
url = url.endswith('&') and (url + param) or (url + '&' + param)
その後、解析されたクエリ文字列にurlencode()
を使用し、ばらばらとURLを再構築するurlsplit()
とurlunsplit()
を使用することができます。
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'
あなたがPythonのを使用することができますURL操作ライブラリfurl。
import furl
f = furl.furl("/scr.cgi?q=1&ln=0")
f.args['SOMESTRING'] = 1
print(f.url)
furlは組み込みモジュールであるとは思われませんので、最初にインストールする必要があります。 – commadelimited
私は改ページに使用しましたが、魅力的でした。ありがとう! – Jabba
これは数年前ですが、この質問はGoogleの検索の先頭ページに表示されているので、これを指摘する必要があると思います。パラメータの順序を気にするならば( 'dosq = 'parse_qs()'ではなく 'parse_qsl()'を使うべきです - 前者はタプルのリストを返しますが、後者はdictを返します。繰り返したとき。その後、 'query_params.append((param_name、param_value))'を使ってparamを追加することができます。 – mhouglum