从URL中检索参数
给定一个像下面这样的URL,我怎样才能parsing查询参数的值? 例如,在这种情况下,我想要def
的值。
/abc?def='ghi'
我在我的环境中使用Django; request
对象上有一个方法可以帮助我吗?
我尝试使用self.request.get('def')
但它并没有像我希望的那样返回值ghi
。
试试这样的事情:
import 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'], par['p']
我很震惊,这个解决scheme已经不在这里了。 使用:
self.request.GET.get('variable_name')
这将从“GET”字典中“获取”variables,如果存在则返回“variable_name”值,如果不存在则返回None对象。
我知道这有点晚了,但是今天我发现自己在这里,我认为这可能是其他人的一个有用的答案。
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的新库。 我发现这个库是做代码的最pythonic。 安装:
pip install furl
码:
from furl import furl f = furl("/abc?def='ghi'") print f.args['def']
对于Python> 3.4
from urllib import parse url = 'http://foo.appspot.com/abc?def=ghi' parse.parse_qs(parse.urlparse(self.get_next_link()).query)['def'][0]
你引用的URL是一个查询types,我看到请求对象支持一个称为参数的方法来获取查询参数。 您也可以直接尝试self.request.get('def')
以从对象中获取您的值。
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)
希望这可以帮助
urlparse模块提供您需要的一切:
urlparse.parse_qs()
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
没有必要这样做。 只与
self.request.get('variable_name')
请注意,我没有指定方法(GET,POST等)。 这是有据可查的 , 这是一个例子
您使用Django模板的事实并不意味着该处理程序也由Django处理
在纯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]
顺便说一句,我遇到了问题,使用parse_qs()并获取空值参数,并获悉您必须传递第二个可选参数'keep_blank_values'返回一个查询string中不包含值的参数列表。 它默认为false。 一些蹩脚的书面API需要参数,即使它们不包含任何值
for k,v in urlparse.parse_qs(p.query, True).items(): print k
有一个很好的库w3lib.url
from w3lib.url import url_query_parameter url = "/abc?def=ghi" print url_query_parameter(url, 'def') ghi