我试图从不同的片段形成URL,并有困难理解这种方法的行为。举例来说:
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'
字符串
你能解释一下这个方法的确切行为吗?
3条答案
按热度按时间nzrxty8p1#
最好的方式(对我来说)是第一个论点,
base
就像你在浏览器中的页面。第二个参数url
是该页面上锚点的href。结果是最终的URL,您将被定向到,如果您单击。字符串
根据我的描述,这是有道理的。虽然人们希望base包括一个方案和域。
型
如果您在vhost上,并且有一个像
<a href='thing'>Foo</a>
这样的锚点,那么链接将带您到http://some/thing
型
这里我们在
some/more
上,因此thing
的相对链接将带我们到/some/thing
型
这里,我们不是在
some/more
上,我们是在some/more/
上,这是不同的。现在,我们的相对链接将带我们到some/more/thing
型
最后,如果在
some/more/
上,并且href是/thing
,你将链接到some/thing
。weylhg0b2#
urllib.parse.urljoin(base,url)
如果url是一个绝对URL(即,以//、http://、https://、...开头),则URL的主机名和/或方案将出现在结果中。举例来说:
字符串
否则,urllib.parse.urljoin(base,url)将
通过将一个“基本URL”(base)与另一个URL(url)组合来构造一个完整的(“绝对”)URL。非正式地,这使用基本URL的组件,特别是寻址方案、网络位置和路径(的一部分),以提供相对URL中的缺失组件。
型
它抓取第一个参数(base)的路径,剥离最后一个/之后的部分,并与第二个参数(URL)连接。
如果url以/开头,它将base的scheme和netloc与url连接起来
型
ncgqoxb03#
一张图片胜过千言万语。
字符串
最佳实践为:
使用结尾带有斜杠(“/”)的“base”参数,避免使用斜杠(“/”)开始“url”参数。