2012-06-05 146 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

请注意这些问题:上述导入语句适用于Python 3.x.对于python 2.x,使用“from urlparse import urljoin”。 –

回答

51

想想这个的最好方法是第一个参数,base就像您在浏览器中的页面。第二个参数url是该页面上锚点的href。结果就是你点击的最后一个网址。

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

这一个是有道理给我的描述。虽然人们希望基地包括计划和领域。

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

如果你是在一个虚拟主机部分,并且有一个锚一样<a href='thing'>Foo</a>那么链接将带您到http://some/thing

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

我们对some/more这里,所以thing相对链接会带我们去/some/thing

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

在这里,我们不是some/more,我们对some/more/这是不同的。现在,我们的相对链接将带我们到some/more/thing

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

最后一点。如果在some/more/和href是/thing,您将链接到some/thing

+0

感谢您解释......这种行为使得查找'true''urljoin',类似于'os.path.join' –