Python网络编程小例子:使用python获取网站域名信息
2015-05-13 19:18
771 查看
Whois简介
whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。早期的whois查询多以命令列接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令列接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
不同域名后缀的whois信息需要到不同的whois数据库查询。如.com的whois数据库和.edu的就不同。目前国内提供WHOIS查询服务的网站有万网、站长之家的等。每个域名或IP的WHOIS信息由对应的管理机构保存,例如,以.com结尾的域名的WHOIS信息由.com域名运营商VeriSign管理,中国国家顶级域名.cn域名由CNNIC管理[1] 。
WHOIS服务是一个在线的“请求/响应”式服务。WHOIS Server运行在后台监听43端口,当Internet用户搜索一个域名(或主机、联系人等其他信息)时,WHOIS Server首先建立一个与Client的TCP连接,然后接收用户请求的信息并据此查询后台域名数据库。如果数据库中存在相应的记录,它会将相关信息如所有者、管理信息以及技术联络信息等,反馈给Client。待Server输出结束,Client关闭连接,至此,一个查询过程结束。
有些注册商,对国际域名的whois信息是屏蔽的,如果要查询只能联系对应的注册商。这种保护机制是防止有人恶意利用这种whois信息的联系方式,暴露客户的隐私信息。
使用python获取网站域名信息
下面的例子将使用站长之家的whois,结合网页爬虫的使用,来获取whois信息。
执行后,info的内容为:
因为免费的原因,获取的信息并不全面,且有许多信息被服务商封闭
获取相应信息后,可以对其进一步的进行解析,例如,结合python中的re模块,对时间信息进行提取等。
在以上例子中使用了python的两个工具包,分别是Beautifulsoup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
另外一个是chardet,用来实现字符串/文件编码检测。
在执行代码时,要确保程序可以找到这两个工具包。具体的见参考文件中的源包相关URL
参考文献:
http://baike.baidu.com/link?url=2eMXzLsFeJFyKxD6117bmL1L6Ka-bFP-SAxK0zF30VagwYD8StCLPnoEf9rDdjj_8metwL1QpcF2XImNDoUvLK
http://whois.chinaz.com/
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://pypi.python.org/pypi/chardet
whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。早期的whois查询多以命令列接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令列接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
不同域名后缀的whois信息需要到不同的whois数据库查询。如.com的whois数据库和.edu的就不同。目前国内提供WHOIS查询服务的网站有万网、站长之家的等。每个域名或IP的WHOIS信息由对应的管理机构保存,例如,以.com结尾的域名的WHOIS信息由.com域名运营商VeriSign管理,中国国家顶级域名.cn域名由CNNIC管理[1] 。
WHOIS服务是一个在线的“请求/响应”式服务。WHOIS Server运行在后台监听43端口,当Internet用户搜索一个域名(或主机、联系人等其他信息)时,WHOIS Server首先建立一个与Client的TCP连接,然后接收用户请求的信息并据此查询后台域名数据库。如果数据库中存在相应的记录,它会将相关信息如所有者、管理信息以及技术联络信息等,反馈给Client。待Server输出结束,Client关闭连接,至此,一个查询过程结束。
有些注册商,对国际域名的whois信息是屏蔽的,如果要查询只能联系对应的注册商。这种保护机制是防止有人恶意利用这种whois信息的联系方式,暴露客户的隐私信息。
使用python获取网站域名信息
下面的例子将使用站长之家的whois,结合网页爬虫的使用,来获取whois信息。
#!/usr/bin/python # -*- coding: utf-8 -*- ''' this code is to get whois info by http://whois.chinaz.com/ Created on 2015-05-13 version: 0.1 @author: zhang ''' import os from urllib2 import Request, urlopen, URLError, HTTPError from bs4 import BeautifulSoup import chardet import socket socket.setdefaulttimeout(30) class get_whois: def __init__(self,url): self.url = url def getDomainInfo(self): domain='http://whois.chinaz.com/'+self.url req = Request(domain) try: response = urlopen(req) except URLError , e : if isinstance(e.reason, socket.timeout): print 'socket timeout' print "network meets some problems: " print "Reason: ",e.reason else: if response != None: the_page = response.read() char = chardet.detect(the_page) #解码为unicode the_page.decode(char['encoding'],'ignore') soup = BeautifulSoup(the_page) #<div class="div_whois"> #因为http://whois.chinaz.com/返回的信息 #包含在 <div class="div_whois">标签中,直接获取 domain = soup.find('div',id="whoisinfo") domain = unicode(domain) return domain if __name__ == "__main__": domain = ['baidu.com'] test = get_whois(domain[0]) info = test.getDomainInfo() print info
执行后,info的内容为:
<div class="div_whois" id="whoisinfo">注册商:MARKMONITOR INC.<br/>域名服务器:whois.markmonitor.com<br/>DNS服务器:DNS.BAIDU.COM<br/>DNS服务器:NS2.BAIDU.COM<br/>DNS服务器:NS3.BAIDU.COM<br/>DNS服务器:NS4.BAIDU.COM<br/>DNS服务器:NS7.BAIDU.COM<br/>域名状态:运营商设置了客户禁止删除保护 http://www.icann.org/epp#运营商设置了客户禁止删除保护<br/>域名状态:运营商设置了客户禁止转移保护 http://www.icann.org/epp#运营商设置了客户禁止转移保护<br/>域名状态:运营商设置了客户禁止修改保护 http://www.icann.org/epp#运营商设置了客户禁止修改保护<br/>域名状态:域名服务器上禁止删除保护 http://www.icann.org/epp#域名服务器上禁止删除保护<br/>域名状态:域名服务器上禁止转移保护 http://www.icann.org/epp#域名服务器上禁止转移保护<br/>域名状态:域名服务器上禁止修改保护 http://www.icann.org/epp#域名服务器上禁止修改保护<br/>更新时间:2013年10月14日<br/>创建时间:1999年10月11日<br/>过期时间:2015年10月11日<br/>联系人:: zhiyong duan<br/><br/></div>
因为免费的原因,获取的信息并不全面,且有许多信息被服务商封闭
获取相应信息后,可以对其进一步的进行解析,例如,结合python中的re模块,对时间信息进行提取等。
在以上例子中使用了python的两个工具包,分别是Beautifulsoup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
另外一个是chardet,用来实现字符串/文件编码检测。
在执行代码时,要确保程序可以找到这两个工具包。具体的见参考文件中的源包相关URL
参考文献:
http://baike.baidu.com/link?url=2eMXzLsFeJFyKxD6117bmL1L6Ka-bFP-SAxK0zF30VagwYD8StCLPnoEf9rDdjj_8metwL1QpcF2XImNDoUvLK
http://whois.chinaz.com/
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://pypi.python.org/pypi/chardet
相关文章推荐
- Python网络编程 获取页面中的天气信息
- 使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
- 使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
- python网络编程之TCP通信实例和socketserver框架使用例子
- python网络编程之TCP通信实例和socketserver框架使用例子
- python网络编程之TCP通信实例和socketserver框架使用例子
- [python&php 网络编程]获取远程机器的信息
- python网络编程之TCP通信实例和socketserver框架使用例子
- 使用python获取系统网络信息
- 初学Python的学习笔记9----面向对象编程(获取对象信息、实例属性和类属性)、面向对象高级编程(使用__slots__、使用@property)
- [Python高效编程] - 获取天气信息并使用迭代for输出
- python自动化运维学习------使用模块psutil获取系统cpu、内存、磁盘、网络、进程等信息
- Linux IO多路复用之epoll网络编程,高并发的使用例子 (含源码)
- java网络编程----------获取Socket信息
- Linux-netstat命令详解和使用例子(显示各种网络相关信息)
- Python 2.7 获取网络信息(Urllib)
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
- python 方法无法在线程中使用(附python获取网络流量)
- 使用python-whois模块查询域名信息
- Linux网络编程之"获取网络天气信息"