2009-08-19 18 views
9

Staram się przekonwertować adres URL na zagnieżdżoną krotkę.Jak przekonwertować ciąg zapytania adresu URL na listę krotek za pomocą języka Python?

# Convert this string 
str = 'http://somesite.com/?foo=bar&key=val' 

# to a tuple like this: 
[(u'foo', u'bar'), (u'key', u'val')] 

zakładam muszę robić coś takiego:

url = 'http://somesite.com/?foo=bar&key=val' 
url = url.split('?') 
get =() 
for param in url[1].split('&'): 
    get = get + param.split('=') 

Co robię źle? Dzięki!

Odpowiedz

28

Wydaje mi się, że szukasz modułu urlparse.

Moduł ten definiuje standardowy interfejs złamać Uniform Resource Locator (URL ) zawiązuje się w komponentach (schemat adresowania, lokalizację sieciową, ścieżkę itp), aby połączyć składniki powrotem w ciągu URL i przekształcenie „względny URL” do bezwzględnej zawartości otrzymujących

Oto przykład „port URL.”:

from urlparse import urlparse, parse_qsl 

url = 'http://somesite.com/?foo=bar&key=val' 
print parse_qsl(urlparse(url)[4]) 

wyjściowa:

[('foo', 'bar'), ('key', 'val')] 

W tym przykładzie pierwszym użyciu funkcji urlparse analizowania całego URL następnie użyć funkcję parse_qsl złamać ciągu kwerendy (piąty element zwrócony od urlparse) na liście krotek.

+0

Wow, idealnie. Dzięki! – orwellian

0

Odpowiedź Andrew była bardzo pouczająca i pomocna. Mniej adept sposobem, aby pobrać te params będzie z wyrażeń regularnych - coś takiego:

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) 

Również w kodzie wygląda próbujesz łączyć listę i tuple -

for param in url[1].split('&'): 
    get = get + param.split('=') 

Utworzono jako krotkę, ale str.split zwraca listę. Może to naprawi twój kod:

for param in url[1].split('&'): 
    get = get + tuple(param.split('=')) 
+2

Wysłałem to dawno temu .... zasłużyłem na ogłoszenie. – twneale

Powiązane problemy