如何使用Python将URL查询字符串转换为元组列表?
我在把一个网址转换成嵌套元组时遇到了困难。
# Convert this string
str = 'http://somesite.com/?foo=bar&key=val'
# to a tuple like this:
[(u'foo', u'bar'), (u'key', u'val')]
我想我需要做一些像这样的事情:
url = 'http://somesite.com/?foo=bar&key=val'
url = url.split('?')
get = ()
for param in url[1].split('&'):
get = get + param.split('=')
我哪里做错了呢?谢谢!
2 个回答
0
安德鲁的回答非常有帮助,信息量也很大。还有一种简单的方法来获取那些参数,就是用正则表达式,像这样:
import re
re_param = re.compile(r'(?P<key>w\+)=(?P<value>w\+)')
url = 'http://somesite.com/?foo=bar&key=val''
params_list = re_param.findall(url)
另外,在你的代码中,看起来你是想把一个列表和一个元组拼接在一起——
for param in url[1].split('&'):
get = get + param.split('=')
你创建的 get 是一个元组,但 str.split 返回的是一个列表。也许这样可以修复你的代码:
for param in url[1].split('&'):
get = get + tuple(param.split('='))
29
我觉得你在找的是 urlparse
模块。
这个模块提供了一种标准的方法,可以把统一资源定位符(URL)字符串拆分成不同的部分(比如地址方案、网络位置、路径等等),也可以把这些部分组合回一个完整的URL字符串,还能把“相对URL”转换成绝对URL,前提是你有一个“基础URL”。
下面是一个例子:
from urlparse import urlparse, parse_qsl
url = 'http://somesite.com/?foo=bar&key=val'
print parse_qsl(urlparse(url)[4])
输出结果:
[('foo', 'bar'), ('key', 'val')]
在这个例子中,我首先使用 urlparse
函数来解析整个URL,然后我用 parse_qsl
函数把查询字符串(从 urlparse
返回的第五个元素)拆分成一个元组列表。