(创作不易,记得点个赞哦)
在信息时代,我们常要由网址得到ip地址。我在网上找了实现它的方法十几分钟,要么无法运行,要么太过臃肿。于是我灵光一闪,想到了一个简单的方法。
由于socket模块的gethostbyname函数只能接收主机名, 所以先写一个从网址中获取主机名的函数。
一个正常的网址,总由几个部分构成:
<协议>://<服务器类型> . <域名>/<目录>/<文件名>
如https://www.baidu.com/, https://www.csdn.net/
而我们所需要的主机名,就是中间这一串:
<服务器类型> . <域名>
即www.baidu.com, www.csdn.net
可以发现,主机名就在第一个“//”和第一个“/”中间。据此,我们可以轻易地编写一个函数从网址中分离出主机名。
def gethost(url):
output = ''
if '//' in url:
output = url.split('//')[1]
if '/' in output:
output = output.split('/')[0]
elif '/' in url:
output = url.split('/')[0]
return output
这是一个简单的函数, 仅在输入的网址比较正常时能达到预期。但是处理从浏览器上复制粘贴的网址足够用了。如有需要,对它进行封装,或者可以使用正则表达式完成分离主机名的工作。
然后把返回值带入gethostbyname中就得到结果了.。
完整程序如下:
from socket import gethostbyname
def gethost(url):
output = ''
if '//' in url:
output = url.split('//')[1]
if '/' in output:
output = output.split('/')[0]
elif '/' in url:
output = url.split('/')[0]
return output
def getip(url):
return gethostbyname(gethost(url))
调用getip函数即可由网址得到ip。
测试如下:
url = (
'https://www.baidu.com/',
'https://www.csdn.net/',
'https://mirrors.tuna.tsinghua.edu.cn/#'
)
for i in url:
print(i, getip(i))
结果:
参考资料: