如何根据 url 准确取出 domain?

2017-07-01 11:57:10 +08:00
 bigzhu

看似很简单的问题, 但是单用程序貌似搞不定哦.

比如有个 url 是这样 https://www.google.com.sg/?gfe_rd=cr&ei=DhtXWc6FJ4Pj8wfH6pjQBw#newwindow=1&q=bigzhu

我要取出 domain, 也就是 google.com.sg, 那么用 python 很好搞定

from urlparse import urlparse
url = urlparse(url)
hostname = url.hostname

hostname 就是 www.google.com.sg

但是前缀 www 的剔除就没法准确的实现了, 我只要 google.com.sg

前缀什么样的都有, 可能是 https://mail.google.com.sg/mail/u/0/#inbox

把第一个 . 前的内容直接剔除? 那如果输入的是 google.com.sg 那就出问题了.

小工具 pp 里要用到, 各位有什么优雅完美的办法么?

4685 次点击
所在节点    问与答
33 条回复
hx1997
2017-07-01 12:15:22 +08:00
从后往前扫,到第一个不是顶级域的域名为止?
msg7086
2017-07-01 12:18:40 +08:00
domain 就应该是 www.google.com.sg
我就问你,www.sb 你指望返回什么结果?
再问你,acm.pku.edu.ax 你指望返回什么结果?
hx1997
2017-07-01 12:19:42 +08:00
啊,上面的术语不是很准确。我的意思就是看看每个点后面是不是有效的域名后缀,比如 .com 和 .sg 都是,但 .google 就不是。
msg7086
2017-07-01 12:22:28 +08:00
@hx1997 .google 是完全有效的域名后缀。https://domains.google/
neilp
2017-07-01 12:23:47 +08:00
@hx1997
`.google` 其实也是: https://www.registry.google/
neilp
2017-07-01 12:24:59 +08:00
比较靠谱的做法 是 扫描 这个 列表: https://publicsuffix.org/
msg7086
2017-07-01 12:33:10 +08:00
另外我看了你的源码。说真的,为什么要重新发明一次轮子呢。
安全性什么的我先不提,digest 出来的密码只会用到 0-9a-f,遇上要求字母+数字+符号复杂度的密码(比如 Windows Server 登录密码),直接就过不去了……
nfroot
2017-07-01 13:16:49 +08:00
首先呢,你去收集到所有域名后缀,然后从后面往前面查询
bigzhu
2017-07-01 13:26:57 +08:00
@msg7086 也就登录下网站,够用了。登录 Server 的不要用这个
xfspace
2017-07-01 13:26:59 +08:00
从第一个双斜杠截到第一个单斜杠
momocraft
2017-07-01 13:28:39 +08:00
"单用程序貌似搞不定" 这个直觉是对的, 这个问题确实需要额外知识如 public suffix list
imn1
2017-07-01 13:33:00 +08:00
那么,
www.net.cn
你期望结果是什么?
yhxx
2017-07-01 13:39:44 +08:00
从后往前也不行
比如 www.asdf.com?xxxx=qwerty.cn
dynos01
2017-07-01 13:49:54 +08:00
还有 http://sb.
然后还有各类免费二级域名,你抓个看看?
hx1997
2017-07-01 14:41:18 +08:00
@neilp 这。。。现在的域名后缀真是够了
dsg001
2017-07-01 15:02:08 +08:00
学会搜索 关键词“ python extract domain ”

https://github.com/john-kurkowski/tldextract

>>> import tldextract

>>> tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')

>>> tldextract.extract('http://forums.bbc.co.uk/') # United Kingdom
ExtractResult(subdomain='forums', domain='bbc', suffix='co.uk')

>>> tldextract.extract('http://www.worldbank.org.kg/') # Kyrgyzstan
ExtractResult(subdomain='www', domain='worldbank', suffix='org.kg')
bigzhu
2017-07-01 17:36:59 +08:00
@dsg001 不需要你来教我搜索
你说这个,我早就看过了。
就是想讨论下,不关联匹配库,是否有办法。
nVic
2017-07-01 17:43:31 +08:00
真的是服了,还是拉黑比较好。
xyjtou
2017-07-01 17:45:41 +08:00
现在的域名后缀这么乱,取主域名越来越难匹配了
flyz
2017-07-01 17:59:41 +08:00
@bigzhu 年轻人,虚心点,虽然别人的回答没有帮助,但是你不应该这个语气,回答问题是义务,别人没有欠你钱

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372314

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX