如何从网址中仅提取域名? [复制]
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"]
从列表的每个元素中,我尝试仅提取域名,例如:arxiv
、doi
、scopus
。
为此我有一个代码:
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.C
或B.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):如何从当前网址中提取特定文本并使用提取的文本转到另一个文本?