如何根据 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 里要用到, 各位有什么优雅完美的办法么?

4722 次点击
所在节点    问与答
33 条回复
binux
2017-07-01 18:10:02 +08:00
@bigzhu #17 不可以,tld 是人为定义的,这个外部知识无法忽略。
dream7758522
2017-07-01 18:58:16 +08:00
少年,虚心点,虽然别人的回答没有帮助,但是你不应该这个语气,回答问题是义务,别人没有欠你钱
bigzhu
2017-07-01 19:03:12 +08:00
@dream7758522 不好意思,我应该年纪比你大,你可能才是少年。
我没说别人欠我什么,但是我也不喜欢别人不做好阅读理解,上来就一副教育的口气。
拉黑不送
bigzhu
2017-07-01 19:04:22 +08:00
@nVic 是的,拉黑你比较好
yangff
2017-07-01 19:25:53 +08:00
原理上,大家都是“.”下的域名。。
所以,没有列表的情况下,你只能提取出.
bigzhu
2017-07-01 19:32:04 +08:00
@yangff 嗯,看来是不可能通过正则等单纯的代码,分析出一个 url 的主域名了,毕竟子域名也是域名
liyvhg
2017-07-01 19:36:27 +08:00
先取出完整的 domain,再查一下 Whois,应该就可以了
msg7086
2017-07-02 03:07:05 +08:00
楼主你别闹了。
回复里说你年轻人这已经很客气了。
你见过聊着聊着突然有人就开始问候你全家还跑到推特新开一个账号去远程喷你的吗?

v 站氛围早就炸了……
bigzhu
2017-07-02 09:42:56 +08:00
@msg7086 问题也讨论清楚了, 歪楼无所谓.
该怼的怼, 该 B 的 B. 不想忍让, B 了更好, 反正不是一个世界的人.
话说 V2EX 也是该考虑好友共享黑名单机制了. 随着用户增加, 一个社区的劣质化是无法避免的.

中文社区氛围最好的就是草榴了, 但技术社区还有哪个质量更好的? 我还真不知道了.
Kilerd
2017-07-02 11:41:10 +08:00
from yarl import URL
blueset
2017-07-02 13:39:39 +08:00
(假设地址合法(Valid))
1. 提取域名。( protocol:lorem.ipsum.example.com/path/file.ext?a=b&c=d#efglorem.ipsum.example.com
2. 如果最后一段是数字,则作为 IP 地址
3. 从所有已知后缀中依次匹配,后缀相同的优先匹配较长的(如有 .com.cn 和 .cn,优先匹配 .com.cn ),然后提取匹配到的前缀和之前一个( losem.ipsum.example.comexample.com )。

如果前面什么都没剩,保留整个域名(如 net.cnnet.cn
如果没有匹配,fallback 到其他方法( WHOIS 等)
msg7086
2017-07-02 17:03:27 +08:00
@bigzhu ruby-china,除了会安利你 ruby 以外,喷子也更少。
bigzhu
2017-07-02 22:16:38 +08:00
@msg7086 氛围确实挺好, 讨论更专注在技术上. 即使我对 ruby 一直无感, 也要多逛逛那里了.

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

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

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

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

© 2021 V2EX