如何把get请求的参数转成字典 (Map)
1
2
|
urlparse.parse_qs(params)
/
/
str
需要转成字典的 请求参数
/
/
{
'phone'
: [
'075988888888'
],
'id'
: [
'10'
],
'name'
: [
'\xe4\xb8\xad\xe6\x96\x87'
]}
|
获取一个网站的get 请求需要的参数
1
|
result
=
urlparse.urlparse(url)
|
urlparse.parse_qs(result.query)
例如 百度搜索
1
2
3
|
urls
=
'https://www.baidu.com/s?wd=%E5%87%BB%E6%B2%89&rsv_spt=1&rsv_iqid=0xc24a2e7700020d3c&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=18&rsv_sug1=23&rsv_sug7=101&rsv_sug2=0&inputT=6850&rsv_sug4=7802'
result
=
urlparse.urlparse(urls)
|
结果是
result---> ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=%E5%87%BB%E6%B2%89&rsv_spt=1&rsv_iqid=0xc24a2e7700020d3c&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf- 8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=18&rsv_sug1=23&rsv_sug7=101&rsv_sug2=0&inputT=6850&rsv_sug4=7802', fragment='')
1
|
params
=
urlparse.parse_qs(result.query)<br><br>结果
|
params---> {'wd': ['\xe5\x87\xbb\xe6\xb2\x89'], 'rsv_spt': ['1'], 'rsv_iqid': ['0xc24a2e7700020d3c'], 'inputT': ['6850'], 'f': ['8'], 'rsv_enter': ['1'], 'rsv_bp': ['0'], 'rsv_idx': ['2'], 'tn': ['baiduhome_pg'], 'rsv_sug4': ['7802'], 'rsv_sug7': ['101'], 'rsv_sug1': ['23'], 'issp': ['1'], 'rsv_sug3': ['18'], 'rsv_sug2': ['0'], 'ie': ['utf-8']}
parse_qs 有几种实现
urlparse.parse_qs 返回字典urlparse.parse_qsl 返回列表这个模块在 python 3.0 中 改名为 urllib.parse
urllib.parse.parse_qs 返回字典urllib.parse.parse_qsl 返回列表
cgi中的这两个函数已经废弃了, 留在模块中 只是为了向后兼容, 推荐使用urlparse.parse_qs 和 urlparse.parse_qslcgi.parse_qscgi.parse_qsl
import urlparse qsdata = "test=test&test2=test2&test2=test3" qs = dict( (k, v if len(v)>1 else v[0] ) for k, v in urlparse.parse_qs(qsdata).iteritems() ) print qs
如果给定你一个URL,比如: http://url/api?param=2¶m2=4 我们需要获取参数名和参数值的话,那可以用到python标准库urlparse
import urlparse
def qs(url):
query = urlparse.urlparse(url).query
return dict([(k,v[0]) for k,v in urlparse.parse_qs(query).items()])
print qs('http://url/api?param=2¶m2=4') 返回的结果:{'param':'2','param2':'4'}
注意,这个模块的parse_qs方法在2;5的版本是不存在的,只有2.5以上的才有,你需要调用该方法的时候可以先通过dir(urlparse)查看模块urlparse是否有相应的方法。