Как я могу преобразовать строку запроса URL в список кортежей, используя Python? - PullRequest
9 голосов
/ 20 августа 2009

Я пытаюсь преобразовать URL во вложенный кортеж.

# 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 ]

28 голосов
/ 20 августа 2009

Я полагаю, вы ищете модуль urlparse.

Этот модуль определяет стандарт интерфейс для взлома Uniform Resource Локатор (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) в список кортежей.

0 голосов
/ 20 августа 2009

Эндрю ответил действительно информативно и полезно. Менее искусный способ получить эти параметры будет с регулярным выражением - что-то вроде этого:

импорт повторно

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