2009-05-19 14 views
0

Es gibt eine Reihe von Fragen darüber, wie man eine URL in Python parsen kann, diese Frage betrifft die beste oder pythonischste Methode.Pythonic URL Parsing

In meiner Analyse brauche ich 4 Teile: den Netzwerkstandort, den ersten Teil der URL, den Pfad und den Dateinamen und Querystring Teile.

http://www.somesite.com/base/first/second/third/fourth/foo.html?abc=123

sollte analysieren, in:

netloc = 'www.somesite.com' 
baseURL = 'base' 
path = '/first/second/third/fourth/' 
file = 'foo.html?abc=123' 

Der folgende Code das richtige Ergebnis erzeugt, aber es gibt bessere Möglichkeit, dies in Python zu tun?

url = "http://www.somesite.com/base/first/second/third/fourth/foo.html?abc=123" 

file= url.rpartition('/')[2] 
netloc = urlparse(url)[1] 
pathParts = path.split('/') 
baseURL = pathParts[1] 

partCount = len(pathParts) - 1 

path = "/" 
for i in range(2, partCount): 
    path += pathParts[i] + "/" 


print 'baseURL= ' + baseURL 
print 'path= ' + path 
print 'file= ' + file 
print 'netloc= ' + netloc 
+0

exaktes Duplikat: http://stackoverflow.com/questions/258746/slicing-url-with-python –

+0

Nicht ganz dasselbe wie 258746, diese Frage hatte ein etwas anderes Ziel und der Schwerpunkt der Frage war der beste (pythonische) Weg, um die Aufgabe zu erfüllen. –

Antwort

6

Da Ihre Anforderungen an, welche Teile Sie sind anders, was urlparse gibt Ihnen, dass so gut wie es geht erhalten zu. Sie könnten jedoch ersetzen diese:

partCount = len(pathParts) - 1 

path = "/" 
for i in range(2, partCount): 
    path += pathParts[i] + "/" 

mit diesem:

path = '/'.join(pathParts[2:-1]) 
2

ich geneigt sein würde mit urlparse zu beginnen. Sie können aber auch rsplit und die maxsplit Parameter von split und rsplit verwenden, um die Dinge ein wenig zu vereinfachen:

_, netloc, path, _, q, _ = urlparse(url) 
_, base, path = path.split('/', 2) # 1st component will always be empty 
path, file = path.rsplit('/', 1) 
if q: file += '?' + q