在Python中从URL提取域名
我试图从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可以是关于一切的,很少有例子:
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