Python网络编程小例子:使用python获取网站域名信息

Whois简介

whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。早期的whois查询多以命令列接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令列接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IPwhois信息由对应的管理机构保存。

 

不同域名后缀的whois信息需要到不同的whois数据库查询。如.com的whois数据库和.edu的就不同。目前国内提供WHOIS查询服务的网站有万网、站长之家的等。每个域名或IPWHOIS信息由对应的管理机构保存,例如,以.com结尾的域名的WHOIS信息由.com域名运营商VeriSign管理,中国国家顶级域名.cn域名由CNNIC管理[1] 。

 

WHOIS服务是一个在线的“请求/响应”式服务。WHOIS Server运行在后台监听43端口,当Internet用户搜索一个域名(或主机、联系人等其他信息)时,WHOIS Server首先建立一个与ClientTCP连接,然后接收用户请求的信息并据此查询后台域名数据库。如果数据库中存在相应的记录,它会将相关信息如所有者、管理信息以及技术联络信息等,反馈给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,网络编程,网页解析,域名服务)