次のようなURLが与えられた場合、クエリパラメータの値を解析するにはどうすればよいですか?たとえば、この場合、def
の値が必要です。
/abc?def='ghi'
私の環境ではDjangoを使用しています。 request
オブジェクトに役立つメソッドがありますか?
self.request.get('def')
を使用しようとしましたが、期待したように値ghi
を返していません。
Python 2:
import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']
Python 3:
import urllib.parse as urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print(urlparse.parse_qs(parsed.query)['def'])
import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)
print par['q'][0], par['p'][0]
私はこの解決策がまだここにないことにショックを受けています。つかいます:
request.GET.get('variable_name')
これは、「GET」辞書から変数を「取得」し、存在する場合は「variable_name」値を返し、存在しない場合はNoneオブジェクトを返します。
Python> 3.4の場合
from urllib import parse
url = 'http://foo.appspot.com/abc?def=ghi'
query_def=parse.parse_qs(parse.urlparse(url).query)['def'][0]
私はこれが少し遅いことを知っていますが、今日ここにいることに気付いたので、これは他の人にとって役に立つ答えかもしれないと思いました。
import urlparse
url = 'http://example.com/?q=abc&p=123'
parsed = urlparse.urlparse(url)
params = urlparse.parse_qsl(parsed.query)
for x,y in params:
print "Parameter = "+x,"Value = "+y
Parse_qsl()では、「データは名前と値のペアのリストとして返されます。」
Furlと呼ばれる新しいライブラリがあります。このライブラリは、URL代数を行うのに最もPythonicであることがわかりました。インストールするには:
pip install furl
コード:
from furl import furl
f = furl("/abc?def='ghi'")
print f.args['def']
あなたが参照しているURLはクエリタイプであり、リクエストオブジェクトは arguments と呼ばれるメソッドをサポートしてクエリ引数を取得していることがわかります。また、self.request.get('def')
を直接試して、オブジェクトから値を取得することもできます。
純粋なPythonの場合:
def get_param_from_url(url, param_name):
return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0]
Urlparseモジュールは必要なものすべてを提供します:
urlparse.parse_qs()
そのいずれかを行う必要はありません。とのみ
self.request.get('variable_name')
メソッド(GET、POSTなど)を指定していないことに注意してください。これは 十分に文書化されている および これは例です
Djangoテンプレートを使用するという事実は、ハンドラーがDjangoによっても処理されることを意味しません
def getParams(url):
params = url.split("?")[1]
params = params.split('=')
pairs = Zip(params[0::2], params[1::2])
answer = dict((k,v) for k,v in pairs)
お役に立てれば
import cgitb
cgitb.enable()
import cgi
print "Content-Type: text/plain;charset=utf-8"
print
form = cgi.FieldStorage()
i = int(form.getvalue('a'))+int(form.getvalue('b'))
print i
Niceライブラリw3lib.urlがあります
from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi
ところで、私はparse_qs()を使用して空の値パラメータを取得する際に問題があり、値を含まないクエリ文字列のパラメータのリストを返すために2番目のオプションパラメータ「keep_blank_values」を渡す必要があることを学びました。デフォルトはfalseです。一部のくだらない記述されたAPIには、値が含まれていない場合でもパラメーターが存在する必要があります
for k,v in urlparse.parse_qs(p.query, True).items():
print k