2009-08-19 8 views
9

Ich habe Schwierigkeiten, eine URL in ein verschachteltes Tupel zu konvertieren.Wie kann ich eine URL-Abfragezeichenfolge mithilfe von Python in eine Liste von Tupeln konvertieren?

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

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

Ich nehme an, ich brauche zu tun zu so etwas wie:

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

Was mache ich falsch? Vielen Dank!

Antwort

28

Ich glaube, Sie suchen nach dem urlparse Modul.

Dieses Modul definiert eine Standardschnittstelle Uniform Resource Locator (URL) zu brechen zeichenketten in Komponenten (Adressierschema, Netzwerkort, Pfad etc.), um die Komponenten zu kombinieren zurück in eine URL-Zeichenfolge und eine „relative URL“ auf eine absolute URL gegeben a zu konvertieren

Hier ist ein Beispiel „Basis-URL.“:

Output:

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

In diesem Beispiel I zuerst die urlparse Funktion verwenden, um die gesamte URL zu analysieren, dann verwende ich die parse_qsl Funktion die Abfragezeichen (das fünfte Element zurück von urlparse) in eine Liste zu brechen von Tupeln.

+0

Wow, perfekt. Vielen Dank! – orwellian

0

Andrew Antwort war wirklich informativ und hilfreich. Ein weniger versierter Weise, jene params greifen mit einem regulären Ausdruck wäre - etwa so:

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) 

Auch im Code sieht es aus wie Sie eine Liste zu verketten sind versucht und tuple--

Sie erstellt Get als ein Tupel, aber str.split gibt eine Liste zurück. Vielleicht würde dies Ihren Code beheben:

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

Ich habe dies vor langer Zeit gepostet .... verdient den Downvote. – twneale

Verwandte Themen