2012-06-05 6 views
32

Sto provando a formare URL da parti diverse e ho difficoltà a capire il comportamento di questo metodo. Per esempio:Python: confusioni con l'urljoin

Python 3.x

from urllib.parse import urljoin 

>>> urljoin('some', 'thing') 
'thing' 
>>> urljoin('http://some', 'thing') 
'http://some/thing' 
>>> urljoin('http://some/more', 'thing') 
'http://some/thing' 
>>> urljoin('http://some/more/', 'thing') # just a tad/after 'more' 
'http://some/more/thing' 
urljoin('http://some/more/', '/thing') 
'http://some/thing' 

si può spiegare l'esatto comportamento di questo metodo?

+0

Nota a chi si imbatte in questa domanda: l'istruzione di importazione precedente è per Python 3.x. Usa "da urlparse import urljoin" per python 2.x. –

risposta

51

Il modo migliore (per me) di pensare a questo è il primo argomento, base è come la pagina che si sta utilizzando nel browser. Il secondo argomento url è l'href di un'ancora su quella pagina. Il risultato è l'url finale a cui verrai indirizzato se clicchi.

>>> urljoin('some', 'thing') 
'thing' 

Questo ha senso dare la mia descrizione. Anche se si spera che la base includa uno schema e un dominio.

>>> urljoin('http://some', 'thing') 
'http://some/thing' 

Se siete su un vhost alcuni, e c'è un'ancora come <a href='thing'>Foo</a> poi il link vi porterà a http://some/thing

>>> urljoin('http://some/more', 'thing') 
'http://some/thing' 

Siamo sulla some/more qui, quindi un collegamento relativo di thing sarà ci portano a /some/thing

>>> urljoin('http://some/more/', 'thing') # just a tad/after 'more' 
'http://some/more/thing' 

Qui, non siamo sulla some/more, siamo sulla some/more/ che è diverso. Ora, il nostro collegamento relativo ci porterà a some/more/thing

>>> urljoin('http://some/more/', '/thing') 
'http://some/thing' 

E infine. Se su some/more/ e href è su /thing, sarai collegato a some/thing.

+0

Grazie per aver spiegato ... questo tipo di comportamento fa apparire 'vero' 'urljoin', comportandosi come' os.path.join' –