2012-06-05 34 views
32

私は別の部分からURLを形成しようとしていますが、このメソッドの動作を理解することができません。たとえば:Python: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' 

あなたは、この方法の正確な動作を説明できますか?

+0

この質問には、上記のimport文がPython 3.x用です。 Python 2.xでは "from urlparse import urljoin"を使用します。 –

答えて

51

これについて考えるのに一番良い方法は、最初の引数で、baseはあなたのブラウザのページに似ています。 2番目の引数urlは、そのページのアンカーのhrefです。結果は、あなたがクリックするべきであるあなたが指示される最終的なURLです。

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

これは私の説明を意味します。基本にはスキームとドメインが含まれることを期待していますが。

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

あなたはバーチャルホストの一部であり、そして<a href='thing'>Foo</a>などのアンカーがある場合、リンクは私たちがここにsome/more上にあるhttp://some/thing

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

thing意志のように相対リンクが表示されます我々はsome/moreではありませんが、ここで/some/thing

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

に私たちを取る、我々は012の上にありますは異なります。現在、相対リンクでは、some/more/thing

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

と最後になります。 some/more/にあり、hrefが/thingの場合、some/thingにリンクされます。

+0

説明してくれてありがとう...この種の振る舞いは、 'os.path.join'と似た、 '真の'' urljoin'を探します。 –