频道栏目
首页 > 资讯 > Python > 正文

python分析http查询字符串 urlparse.parse_qs实例讲解

18-06-28        来源:[db:作者]  
收藏   我要投稿

如何把get请求的参数转成字典 (Map)

urlparse.parse_qs(params) //str 需要转成字典的 请求参数

//{'phone': ['075988888888'], 'id': ['10'], 'name': ['\xe4\xb8\xad\xe6\x96\x87']}

获取一个网站的get 请求需要的参数

result = urlparse.urlparse(url)

urlparse.parse_qs(result.query)

例如 百度搜索

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='')

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&param2=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&param2=4') 返回的结果:{'param':'2','param2':'4'} 

注意,这个模块的parse_qs方法在2;5的版本是不存在的,只有2.5以上的才有,你需要调用该方法的时候可以先通过dir(urlparse)查看模块urlparse是否有相应的方法。

相关TAG标签
上一篇:react-router按需加载实例讲解
下一篇:【基础练习习题】FJ的字符串
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站