【发布时间】:2013-07-29 15:48:01
【问题描述】:
如何从 URL 中获取 URL 参数列表?
例如:http://example.com/blank.html?access_token=blablabla&expires_in=0&user_id=ablabl&secret=rararar。
我需要得到access_token、expires_in、user_id、secret。
【问题讨论】:
如何从 URL 中获取 URL 参数列表?
例如:http://example.com/blank.html?access_token=blablabla&expires_in=0&user_id=ablabl&secret=rararar。
我需要得到access_token、expires_in、user_id、secret。
【问题讨论】:
使用urlparse.parse_qs()或urlparse.parse_qsl()解析查询字符串:
from urlparse import parse_qs, parse_qsl, urlparse
query_string = urlparse(url).query
if query_string:
data_as_dict = parse_qs(query_string) # returns a dictionary with lists
data_as_list = parse_qsl(query_string) # returns a list of tuples
演示:
>>> from urlparse import parse_qs, parse_qsl
>>> url = 'http://example.com/blank.html?access_token=blablabla&expires_in=0&user_id=ablabl&secret=rararar'
>>> query_string = url.partition('?')[2]
>>> parse_qs(query_string)
{'access_token': ['blablabla'], 'user_id': ['ablabl'], 'secret': ['rararar'], 'expires_in': ['0']}
>>> parse_qsl(query_string)
[('access_token', 'blablabla'), ('expires_in', '0'), ('user_id', 'ablabl'), ('secret', 'rararar')]
由于查询字符串中的任何键都可能出现多次,因此每个键最终可能有多个值。 parse_qs() 函数将所有值收集到每个键的列表中,parse_qsl() 函数只是将每个键值对作为元组返回,让您决定如何处理重复项。
【讨论】:
urlparse,使用urlparse.urlparse或urlparse.urlsplit而不是str.partition不是更好吗?
str.partition() 仅此而已.. 很方便。
# 的处理效果不佳,如http://example.com/?q1=a1&q2=a2#label。