如何从网址中仅提取域名? [复制]

Posted

技术标签:

【中文标题】如何从网址中仅提取域名? [复制]【英文标题】:How to extract just domain names from urls? [duplicate] 【发布时间】:2022-01-08 06:12:36 【问题描述】:

我有以下 URL 列表:

urls = ["http://arxiv.org/pdf/1611.08097", "https://doi.org/10.1109/tkde.2016.2598561", "https://www.scopus.com/inward/record.uri?partnerID=HzOxMe3b&scp=85116544648&origin=inward"]

从列表的每个元素中,我尝试仅提取域名,例如:arxivdoiscopus

为此我有一个代码:

import re

for url in urls:
    print(re.search('https?://([A-Za-z_0-9.-]+).*', url).group(1))

打印的输出:

arxiv.org
doi.org
www.scopus.com

如何修改上述正则表达式以仅提取域而不提取 www..com.org 等其他内容?

提前致谢。

【问题讨论】:

如果你有类似www.sub.domain.co.uk的东西怎么办? @mozway 绝不会如此 所以总是A.B.CB.C 而你想要B @mozway 是的,完全正确 好的,我modified your regex 【参考方案1】:

要仅获取域的倒数第二个块,您可以将正则表达式修改为:

[re.search('https?://(?:[^/]+\.)?([A-Za-z_0-9-]+)\.[^/.]+(?:/.*)?', url).group(1)
 for url in urls]

输出:

['arxiv', 'doi', 'scopus']
urllib

@AbdulNiyasPM 有一个很好的答案,可惜它被删除了,你可以修改它以获得你想要的:

from urllib.parse import urlparse
[urlparse(url).hostname.split('.')[-2]
 for url in urls]

【讨论】:

【参考方案2】:

您可以从字符类中删除点并制作 www。可选的。该值在捕获组 1 中。

https?://(?:www\.)?([A-Za-z_0-9-]+)

Regex demo

【讨论】:

以上是关于如何从网址中仅提取域名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python制作网站服务器,让客户通过网址,访问我电脑的文件?

如何从 Javascript 中的 URL 中提取 GET 参数? [复制]

PYTHON + SELENIUM(CHROME):如何从当前网址中提取特定文本并使用提取的文本转到另一个文本?

如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath

php 从网址获取域名

JavaScript 从网址中删除域名(不含http://)