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

时间:2009-08-19 21:23:16

标签: python url parsing

我正在努力将网址转换为嵌套元组。

# 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 :(得分:28)

我相信您正在寻找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返回的第五个元素)分解为一个列表元组。

答案 1 :(得分:0)

安德鲁的回答非常有用,而且很有帮助。抓住那些参数的不太熟练的方法是使用正则表达式 - 类似这样:

导入重新

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