在Python中从URL提取域名

在Python中从URL提取域名,python,regex,url,server,package,Python,Regex,Url,Server,Package,我试图从URL列表中提取域名。就像在 我的问题是,URL可以是关于一切的,很少有例子: m.google.com=>google m.docs.google.com=>google www.someisotericdomain.innersite.mall.co.uk=>mall www.ouruniversity.department.mit.ac.us=>mit www.some奇异url.shops.relevantdomain.net=>relevantdomain www.examp

我试图从URL列表中提取域名。就像在
我的问题是,URL可以是关于一切的,很少有例子:
m.google.com
=>
google

m.docs.google.com
=>
google

www.someisotericdomain.innersite.mall.co.uk
=>
mall

www.ouruniversity.department.mit.ac.us
=>
mit

www.some奇异url.shops.relevantdomain.net
=>
relevantdomain

www.example.info
=>
example

等等..
域的多样性不允许我使用如中所示的正则表达式(因为我的脚本将运行在来自真实网络流量的大量URL上,所以正则表达式必须非常庞大才能捕获所提到的所有类型的域)。
不幸的是,我的网络研究没有提供任何有效的解决方案。
有人知道怎么做吗?
任何帮助都将不胜感激

谢谢

您似乎可以对该url使用url解析,然后提取netloc


从netloc中,您可以通过使用split和regex轻松提取域名,您可以使用如下内容:


(?使用
tldextract
这是
urlparse
的更有效版本,
tldextract
准确地将
gTLD
ccTLD
(通用或国家代码顶级域)从URL的注册
域和
子域中分离出来

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

通过正则表达式的简单解决方案

重新导入
def域名(url):
返回url.split(“www.”[-1]。split(“/”[-1]。split(“.”[0]

你可以使用外部库吗?收集顶级域列表,将你的url拆分为点,从TLD中右键删除你的url,提取名称。可能重复是的,我可以使用外部库。这不是重复(我甚至附加了一个指向此线程的链接),我在那里找不到满意的答案。使用感谢您的响应,不幸的是,在url上使用URLPRASE,如
m.city.domain.com
返回我
ParseResult(scheme='',netloc='',path='m.city.domain.com',params='',query='',fragment='')
,而预期的输出是
domain
,请使用有效的url(//m.city.domain.com/),而不是类似于(m.city.domain.com)的。没有人能猜到您删除反斜杠时传递了什么。注意:
tldextract
库在初始安装时发出http请求,并创建最新tld数据的缓存。这可能会导致某些远程部署的权限错误。请参阅此处:获取域的第一部分,而不是实际域。仅适用于ike www.google.com