如何从URL字符串中获取域名?
+----------------------+------------+
| input | output |
+----------------------+------------+
| www.google.com | google |
| www.mail.yahoo.com | mail.yahoo |
| www.mail.yahoo.co.in | mail.yahoo |
| www.abc.au.uk | abc |
+----------------------+------------+
Run Code Online (Sandbox Code Playgroud)
有关:
需要一种方法来使用Python urlparse从URL中提取没有子域的域名.
例如,我想"google.com"从一个完整的URL中提取出来"http://www.google.com".
我似乎最接近的urlparse是netloc属性,但它包括子域,在本例中它将是www.google.com.
我知道可以编写一些自定义字符串操作来将www.google.com转换为google.com,但我希望在此任务中避免使用字符串转换或正则表达式.(原因是我对url形成规则不够熟悉,以确信我可以考虑编写自定义解析函数所需的每个边缘情况.)
或者,如果urlparse不能做我需要的,有没有人知道任何其他Python url解析库?
例如,地址是:
Address = http://lol1.domain.com:8888/some/page
我想将子域保存到变量中,所以我可以这样做;
print SubAddr
>> lol1
Run Code Online (Sandbox Code Playgroud) 我有一个域列表,例如
site.co.uk
site.com
site.me.uk
site.jpn.com
site.org.uk
site.it
域名也可以包含第3和第4级域名,例如
test.example.site.org.uk
test2.site.com
在所有这些情况下,我需要尝试提取二级域名 site
有任何想法吗?:)
我的要求是通过过滤掉它的子域名来获取 URL 的域名。
我可以使用以下代码获取主机名
if let url = URL(string: "https://blog.abc.in/") {
if let hostName = url.host {
print("host name = \(hostName)") // output is: blog.mobilock.in
}
}
Run Code Online (Sandbox Code Playgroud)
所以在 URL博客中是一个子域,而abc是一个域名,我希望通过排除其子域部分来只知道/打印abc。
在android中,有一个返回域名的类InternetDomainName,我正在寻找iOS的类似解决方案
我尝试了几个答案,但它不是重复的任何一个或其中一些不起作用,或者这是一种解决方法。
可能重复:
如何从URL中提取域名
我想从URL中提取网站,即console.aws.amazon.com从以下URL中提取网站.
>>> ts
'https://console.aws.amazon.com/ec2/home?region=us-east-1#s=Instances,EC2 Management Console,12/3/2012 4:34:57 PM,11,0,,25806'
>>> re.match(ts,'(")?http(s)?://(.*?)/').group(0)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
re.match(ts,'(")?http(s)?://(.*?)/').group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Run Code Online (Sandbox Code Playgroud)
我在JS中尝试了这个正则表达式并且它有效.知道为什么这在JS中匹配,但它在Python中不起作用?
所以我编写了一个小函数来从输入域字符串中删除子域(如果有):
def rm(text):
print(text.replace(text, '.'.join(text.split('.')[-2:])), end="")
print("\n")
if __name__ == "__main__":
rm("me.apple.com")
rm("not.me.apple.com")
rm("really.not.me.apple.com")
# problem here
rm("bbc.co.uk")
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到你有.something.somethingtld., like.co.uk或.co.in。
所以我的输出是:
apple.com
apple.com
apple.com
--> co.uk
Run Code Online (Sandbox Code Playgroud)
它应该在的地方,
apple.com
apple.com
apple.com
bbc.co.uk
Run Code Online (Sandbox Code Playgroud)
如何以优雅的方式修复/创建该函数,而不是检查所有可能的双重顶级域名? 编辑:如果这很重要的话,我将不得不检查数百万个域名。所以我要做的就是将一个域传递给我的函数并获得一个干净的、无子域的域。