URL에서 매개 변수 검색


164

다음과 같은 URL이 주어지면 쿼리 매개 변수의 값을 어떻게 구문 분석 할 수 있습니까? 예를 들어,이 경우 값을 원합니다 def.

/abc?def='ghi'

내 환경에서 Django를 사용하고 있습니다. request나를 도울 수 있는 방법이 있습니까?

나는 사용을 시도 self.request.get('def')했지만 ghi원하는대로 값 을 반환하지 않습니다 .

답변:


256

파이썬 2 :

import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']

파이썬 3 :

import urllib.parse as urlparse
from urllib.parse import parse_qs
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print(parse_qs(parsed.query)['def'])

parse_qs값 목록을 반환하므로 위의 코드가 인쇄 ['ghi']됩니다.

다음은 Python 3 설명서입니다.


58
python3에서import urllib.parse as urlparse
Ivan De Paz Centeno

26
parse_qs당신에게 목록 개체를 반환합니다. 문자열을 원한다면 첫 번째 요소를 얻어야합니다urlparse.parse_qs(parsed.query)['def'][0]
raffaem

3
url에 foo.appspot.com/#/abc?def=ghi 와 같은 '#'문자가 포함 된 경우 조각을 허용하지 않아야합니다. urlparse(url, allow_fragments=False)그렇지 않으면 쿼리는 빈 str을 반환합니다.
codezjx

2
python3에 사용해야 from urllib.parse import urlparse, parse_qs하고parse_qs(parsed.query)
deathemperor

1
@FrancescoFrassinelli 유효합니다. urlparse.urlparse(url)->urlparse(url)
Winand

55

이 솔루션이 아직 여기에 있지 않다는 것에 놀랐습니다. 사용하다:

request.GET.get('variable_name')

이렇게하면 "GET"사전에서 변수를 "가져오고"변수가 있으면 'variable_name'값을, 존재하지 않으면 None 객체를 반환합니다.


3
이것이 최고의 답변이되어야합니다. 매력처럼 작동합니다.
muntasir2000

2
나는 떠나야 self했지만 위의 의견에 동의합니다.
Matt Cremeens

나는 이것을 작동시킬 수 없다. 더 자세한 내용이있을 수 있습니다. 당신은 어떻게 요청을 받고 있습니까? 이 python3은 호환됩니까?
ggedde

3
@ggedde이 답변 (질문과 같은)은 django에 대한 것이며 django 요청 객체입니다. 장고를 사용하지 않는 경우 다른 답변 중 하나를 사용하십시오.
Florian

55
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]

46

파이썬> 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]

4
가장 좋은 방법은 IMO입니다. 추가 패키지가 필요하지 않으며 Python 3.5에서 A +를 작동합니다.
wanaryytel

23

furl이라는 새로운 라이브러리가 있습니다. 이 라이브러리가 url 대수를 수행하는 데 가장 비열한 것으로 판명되었습니다. 설치하기 위해서:

pip install furl

암호:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']

3
훌륭한 도서관! 그것에 대해
몰랐지만

3
:) 나는 urlparse가 나를 위해 일하도록 노력하면서 시간을 낭비했다. 더 이상은 없어.
Mayank Jaiswal

18

나는 이것이 조금 늦었다는 것을 알고 있지만 오늘 여기에서 나 자신을 발견 한 후에 이것은 다른 사람들에게 유용한 대답이라고 생각했습니다.

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 ()을 사용하면 "데이터가 이름, 값 쌍의 목록으로 리턴됩니다."


5

당신이 언급하는 URL은 쿼리 유형이며 요청 객체는 쿼리 인수를 얻기 위해 인수 라는 메소드를 지원합니다 . self.request.get('def')객체에서 직접 가치를 얻으 려고 할 수도 있습니다 .


3
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)

도움이 되었기를 바랍니다


이것은 webapp 내에서 필요하지 않아야합니다.
Nick Johnson


3

그 어떤 것도 할 필요가 없습니다. 와 함께

self.request.get('variable_name')

메소드 (GET, POST 등)를 지정하지 않았습니다. 이것은 잘 문서화되어 있으며 이것은 예입니다

Django 템플릿을 사용한다고해서 장고가 처리기를 처리한다는 의미는 아닙니다.


3

순수한 파이썬에서 :

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]

2
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

0

Btw, parse_qs ()를 사용하고 빈 값 매개 변수를 얻는 데 문제가 있었고 값이없는 쿼리 문자열의 매개 변수 목록을 반환하려면 두 번째 선택적 매개 변수 'keep_blank_values'를 전달해야한다는 것을 알았습니다. 기본값은 false입니다. 일부 크 래피로 작성된 API에는 값이 없어도 매개 변수가 있어야합니다.

for k,v in urlparse.parse_qs(p.query, True).items():
  print k

0

멋진 라이브러리 w3lib.url이 있습니다

from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi

0

parameters = dict ([get_parsed_url [4] .split ( '&')]의 일부에 대한 [part.split ( '='))

이것은 간단합니다. 변수 매개 변수는 모든 매개 변수의 사전을 포함합니다.


0

Tornado 사용자에게는 답변이 없습니다.

key = self.request.query_arguments.get("key", None)

이 메소드는 다음에서 파생 된 핸들러 내에서 작동해야합니다.

tornado.web.RequestHandler

요청 된 키를 찾을 수 없을 때이 메소드가 리턴하는 응답은 없습니다. 이를 통해 일부 예외 처리가 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.