如何规范化 URL 并忽略斜杠后的任何内容?

问题描述

我有数百个 URL,我想将它们规范化为域格式 -> domain.com、domain.ie、domain.de、domain.es 等。但是我正在努力涵盖在'/' 符号。

我假设我需要添加一个 if 条件并找到 URL 字符串中第一个斜杠 (/) 的位置,然后用类似于 u.rsplit('/',1)[-1]内容分割?

到目前为止我的代码

from w3lib.url import url_query_cleaner
from url_normalize import url_normalize

urls = ['foo.com','www.foo.com/','foo.com/us','foo.com/ca/example-test/']


def canonical_url(u):
    u = url_normalize(u)
    u = url_query_cleaner(u,parameterlist = ['utm_source','utm_medium','utm_campaign','utm_term','utm_content'],remove=True)
    if u.startswith("http://"):
        u = u[7:]
    if u.startswith("https://"):
        u = u[8:]
    if u.startswith("www."):
        u = u[4:]
    if u.endswith("/"):
        u = u[:-1]
    return u

list(map(canonical_url,urls))

目前返回:

['foo.com','foo.com','foo.com/ca/example-test']

预期结果:

['foo.com','foo.com']

有人可以帮我吗?提前谢谢你

解决方法

你可以在 python 中使用 URLlib 模块

from urllib3.util import parse_url

urls = ['foo.com','www.foo.com/','foo.com/us','foo.com/ca/example-test/']
for url in urls:
   parsed_url = parse_url(url)
   host = parsed_url.host if not parsed_url.host.startswith('www.') else parsed_url.host.lstrip('www.')

输出将如您所愿。

,

如果您不想使用 urllib,它可以为您做到这一点,您可以使用 split。

def canonical_url(u):
    u = url_normalize(u)
    u = url_query_cleaner(u,parameterlist = ['utm_source','utm_medium','utm_campaign','utm_term','utm_content'],remove=True)
    u = u.lstrip("http://")
    u = u.lstrip("https://")
    u = u.lstrip("www.")
    u = u.split('/')[0]  # get before first slash
    return u