如何标准化 URL 并忽略斜杠后的任何内容?
How to normalize URL and disregard anything after the slash?
我有数百个 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))
目前这个returns:
['foo.com', 'foo.com', 'foo.com/us', 'foo.com/ca/example-test']
预期结果:
['foo.com', 'foo.com', '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
我有数百个 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))
目前这个returns:
['foo.com', 'foo.com', 'foo.com/us', 'foo.com/ca/example-test']
预期结果:
['foo.com', 'foo.com', '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