URL查询参数转为字典的Python方法

2024-05-18 07:14:06 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法解析一个URL(使用一些python库)并返回一个python字典,其中包含URL的查询参数部分的键和值?

例如:

url = "http://www.example.org/default.html?ct=32&op=92&item=98"

预期回报:

{'ct':32, 'op':92, 'item':98}

Tags: orghttpdefaulturl参数字典examplehtml
3条回答

使用^{} library

>>> from urllib import parse
>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98"
>>> parse.urlsplit(url)
SplitResult(scheme='http', netloc='www.example.org', path='/default.html', query='ct=32&op=92&item=98', fragment='')
>>> parse.parse_qs(parse.urlsplit(url).query)
{'item': ['98'], 'op': ['92'], 'ct': ['32']}
>>> dict(parse.parse_qsl(parse.urlsplit(url).query))
{'item': '98', 'op': '92', 'ct': '32'}

urllib.parse.parse_qs()urllib.parse.parse_qsl()方法解析查询字符串,同时考虑到键可以出现多次,而且顺序可能很重要。

如果您仍然使用Python 2,那么urllib.parse被称为^{}

对于Python 3,来自parse_qs的dict的值在一个列表中,因为可能有多个值。如果你只想要第一个:

>>> from urllib.parse import urlsplit, parse_qs
>>>
>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98"
>>> query = urlsplit(url).query
>>> params = parse_qs(query)
>>> params
{'item': ['98'], 'op': ['92'], 'ct': ['32']}
>>> dict(params)
{'item': ['98'], 'op': ['92'], 'ct': ['32']}
>>> {k: v[0] for k, v in params.items()}
{'item': '98', 'op': '92', 'ct': '32'}

如果您不喜欢使用解析器:

url = "http://www.example.org/default.html?ct=32&op=92&item=98"
url = url.split("?")[1]
dict = {x[0] : x[1] for x in [x.split("=") for x in url[1:].split("&") ]}

所以我不会删除上面的内容,但绝对不是你应该使用的。

我想我读了一些答案,它们看起来有点复杂,如果你和我一样,不要用我的答案。

使用这个:

from urllib import parse
params = dict(parse.parse_qsl(parse.urlsplit(url).query))

对于Python 2.X

from urllib import urlparse as parse

我知道这和公认的答案是一样的,只是一行字可以复制。

相关问题 更多 >