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

9 投票
2 回答
8170 浏览
提问于 2025-04-15 13:43

我在把一个网址转换成嵌套元组时遇到了困难。

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

撰写回答