【问题标题】:Remove every character before the website name in a URL删除 URL 中网站名称前的每个字符
【发布时间】:2018-04-14 00:41:09
【问题描述】:

例如,如果我有https://stackoverflow.com/questions/ask,我想将其剪切为stackoverflow.com/questions/ask,或者如果我有http://www.samsung.com/au/,我想将其剪切为samsung.com/au/

我想为此制作一个模板标签,但不确定返回什么:

def clean_url(url):
    return ?

模板

{{ url|clean_url }}

有什么想法吗?

【问题讨论】:

  • 为什么要这样做?
  • 在我网站上的广告帖子上,我想向该网站显示帖子链接 - 但我希望它看起来很干净,没有 httpswww
  • 参见 here,但在 Python 3 中是 from urllib.parse import urlparse
  • @ivan_pozdeev,这是不必要的。在键入要搜索的内容时,并非每个人都有您的思考过程。

标签: python django


【解决方案1】:

这是一种快速而肮脏的方法来隔离以something//开头的域

def clean(url):
  return url.partition('//')[2].partition('/')[0]

【讨论】:

  • 或者只使用快速干净的urllib.parse.urlparse(url).netloc :) 不过他想保留路径,而不仅仅是域。
【解决方案2】:

urllib.parse 将为您完成大部分工作:

import urllib.parse
def clean_url(url):
    parts = list(urllib.parse.urlsplit(url))
    parts[0]=""
    cleaned = urllib.parse.urlunsplit(parts)[2:]
    return cleaned

请注意,这不会切断“www.”,但您不应该这样做;这可能是域名的关键部分。如果您真的想要,请添加:

if cleaned.startswith("www."):
    cleaned = cleaned[4:]

【讨论】:

    【解决方案3】:

    对于您所描述的用例。您可以在双反斜杠上拆分并使用它或从那里开始工作。

    def clean_url(url):
        clean = url.split('//')[1]
        if clean[0:4] == 'www.':
            return clean[4:]
        return clean
    

    但是,由于子域(例如“www”)可以用作 url 的重要部分,您可能希望将其保留在其中。例如,www.pizza.com 和 Pizza.com 可能是指向不同的页面。

    其他要考虑的事情是 urlparse 库或正则表达式,但它们可能为此过分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多