我正在努力将网址转换为嵌套元组。
# 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('=')
我做错了什么?谢谢!
答案 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('='))