如何使用Python将URL查询字符串转换为元组列表?

9

我正在努力将一个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个回答

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返回的第五个元素)分解为一个元组列表。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接