如何从URL中提取不含主域名的子域名部分
从URL提取子域名的可行方案
核心前置说明
首先要明确域名的结构逻辑:标准域名格式为[子域名].<主域名>.<顶级域名>,部分顶级域名是多段形式(比如.com.cn、.co.jp),如果要兼容这类场景需要先引入公共后缀列表做匹配,普通场景直接按段拆分即可。
不同环境的实现方案
Python实现
- 普通场景(仅适配单段顶级域名,比如.com/.org等)
from urllib.parse import urlparse url = "http://www.example.com" # 解析URL拿到完整域名 full_domain = urlparse(url).netloc # 按点拆分域名段 domain_parts = full_domain.split('.') # 单段顶级域名下,去掉最后两段(主域名+顶级域名),剩余的拼接就是子域名 subdomain = '.'.join(domain_parts[:-2]) print(subdomain) # 输出:www
- 兼容多段顶级域名的场景,用
tldextract库:
import tldextract url = "http://www.example.com.cn" ext = tldextract.extract(url) subdomain = ext.subdomain print(subdomain) # 输出:www
JavaScript实现
const url = new URL("http://www.example.com"); const fullDomain = url.hostname; const domainParts = fullDomain.split('.'); // 普通场景取除了最后两段的部分 const subdomain = domainParts.slice(0, -2).join('.'); console.log(subdomain); // 输出:www
如果要兼容多段顶级域名,可以引入psl库(公共后缀列表实现)处理。
Shell命令实现(用grep+awk)
echo "http://www.example.com" | awk -F/ '{print $3}' | awk -F. '{OFS="."; if(NF>2) print $(NF-2)}' # 输出:www
注意事项
- 如果主域名本身就是两段以上(比如
example.co.uk),直接按去掉最后两段的逻辑会出错,必须依赖公共后缀列表匹配正确的顶级域名段长度 - 注意URL不带协议的场景,比如
www.example.com,部分URL解析库会识别失败,建议先补全协议头再做解析
内容的提问来源于stack exchange,提问作者Supriya
相关产品推荐
相关产品推荐

