您的位置:首页 > 理论基础 > 计算机网络

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信息。

#!/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: