【问题标题】:python urljoin not finding the absolute pathpython urljoin找不到绝对路径
【发布时间】:2018-04-13 21:06:05
【问题描述】:

我正在尝试获取绝对路径,但没有得到正确的结果。这是我正在尝试的:

鉴于我有这个 html 页面网址:

url1 = 'build/en/index.html'

我在文件中有这个相对路径:

url2  = '/pub-assets/css/indexen.css'

我在做:

urljoin(url1, url2)

所以我应该得到 build/pub-assets/css/indexen.css

但我没有得到预期的结果。 任何建议都非常感谢。

【问题讨论】:

  • @MdJohirulIslam 我已经看过这篇文章,但它并没有解决我的问题
  • 您犯了其他错误。我运行您的代码并获得正确的路径https://example.com/en/pub-assets/css/indexen.css。如果您上传更多代码,那将有所帮助

标签: python html relative-path absolute-path


【解决方案1】:

如果您的url1 是一个文件(而不是目录),您应该使用urlparseParseResult._replace 修改路径来修改结果。

from urlparse import urlsplit

url1 = 'https://example.com/en/index.html'
url2  = 'pub-assets/css/indexen.css'

p = urlsplit(url1).path
new_path = p[:p.rfind('/') + 1] + url2    #Gets the last directory and appends url
joined = urlsplit(url1)._replace(path=new_path)
print joined.geturl()  #Outputs https://example.com/en/pub-assets/css/indexen.css

这是假设url1 是绝对路径,url2 是相对路径。

【讨论】:

  • url1 = 'build/en/index.html' --- url2 = '/pub-assets/css/indexen.css' 结果:build/en//pub-assets/css /indexen.css
  • @Milix 这是使用您的问题,因为它最初是在url2 中没有前导斜杠的情况下提出的。如果你总是有一个带有url2 的斜杠,那么通过删除答案中的+1 来删除尾部斜杠。
【解决方案2】:

Python 3.6.1:

>>> u1 = 'https://example.com/en/index.html'
>>> u2 = 'pub-assets/css/indexen.css'
>>> import urllib.parse
>>> urllib.parse.urljoin(u1, u2)
'https://example.com/en/pub-assets/css/indexen.css'

Python 2.7.14:

>>> u1 = 'https://example.com/en/index.html'
>>> u2 = 'pub-assets/css/indexen.css'
>>> import urlparse
>>> urlparse.urljoin(u1, u2)
'https://example.com/en/pub-assets/css/indexen.css'

注意更改的导入。我会仔细检查您的 Python 版本、导入语句,并可能发布更多您的程序。

【讨论】:

  • 我鼓励您尝试使用urllib.parse 中的一些更具体的方法来解析网址。
  • 另外,使用 Python 3.6.4,我可以 urljoin 你的示例 URL 并得到 build/en/pub-assets/css/indexen.css。你用的是什么版本的 Python?
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
相关资源
最近更新 更多