从URL中检索参数

nit*_*shb 140 python django url parsing

给定如下的URL,如何解析查询参数的值?例如,在这种情况下,我想要的值def.

/abc?def='ghi'
Run Code Online (Sandbox Code Playgroud)

我在我的环境中使用Django; request对象上有一种方法可以帮助我吗?

我尝试过使用self.request.get('def')它但没有ghi像我希望的那样返回值.

sys*_*out 218

试试这样的事情:

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

  • 在python3中`import urllib.parse as urlparse` (53认同)
  • 请注意,`parse_qs`将返回一个列表对象.如果你想要一个字符串`urlparse.parse_qs(parsed.query)['def'] [0],你需要得到它的第一个元素. (18认同)
  • 在python3中,必须使用“from urllib.parse import urlparse, parse_qs”和“parse_qs(parsed.query)” (4认同)
  • 请注意,如果 url 像这样包含 '#' 字符:http://foo.appspot.com/#/abc?def=ghi,则必须禁止片段:`urlparse(url, allow_fragments=False)`,否则查询将返回空字符串。 (3认同)

Cri*_*ris 53

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]
Run Code Online (Sandbox Code Playgroud)


jba*_*037 45

我很震惊这个解决方案已不在这里了.使用:

request.GET.get('variable_name')
Run Code Online (Sandbox Code Playgroud)

这将从"GET"字典中"获取"变量,如果存在,则返回"variable_name"值,如果不存在,则返回None对象.

  • 这应该是最好的答案.奇迹般有效. (3认同)
  • 我不得不放弃"自我",但我同意上述评论. (2认同)
  • @ggedde这个答案(就像问题一样)是针对django的,它是django请求的对象。如果您没有使用django,请使用其他答案之一。 (2认同)

小智 37

对于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]
Run Code Online (Sandbox Code Playgroud)

  • 最好的办法IMO.不需要额外的包,并在Python 3.5上运行A +. (4认同)

May*_*wal 20

有一个名为furl的新库.我发现这个库是做网址代数最pythonic的.安装:

pip install furl
Run Code Online (Sandbox Code Playgroud)

码:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']
Run Code Online (Sandbox Code Playgroud)

  • 好图书馆!不知道它,但工作就像一个魅力:) (3认同)
  • :)我浪费了我的时间,试图让urlparse为我工作.不再. (2认同)

iCa*_*Fay 17

我知道这有点晚了但是因为我今天发现自己在这里,我认为这对其他人来说可能是一个有用的答案.

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
Run Code Online (Sandbox Code Playgroud)

使用parse_qsl(),"数据将作为名称,值对的列表返回."


ins*_*get 6

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)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Asy*_*sym 6

在纯 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]
Run Code Online (Sandbox Code Playgroud)


Sen*_*ran 5

您引用的URL是查询类型,我看到请求对象支持一个名为arguments的方法来获取查询参数.您可能还想self.request.get('def')直接尝试从对象中获取值.