web访问日志中含有来访IP,通过IP查看归属地,最后统计访问的区域分布,可细化到省、市
淘宝接口地址:http://ip.taobao.com/service/getIpInfo.php?ip=14.215.177.38,后面的IP按需修改
例如要查看14.215.177.38这个地址的相关信息,返回的信息如下:
{"code":0,"data":
{"country":"\u4e2d\u56fd",
"country_id":"CN",
"area":"\u534e\u5357",
"area_id":"800000",
"region":"\u5e7f\u4e1c\u7701",
"region_id":"440000",
"city":"\u5e7f\u5dde\u5e02",
"city_id":"440100",
"county":"",
"county_id":"-1",
"isp":"\u7535\u4fe1",
"isp_id":"100017",
"ip":"14.215.177.38"}
}
返回内容以字典形式保存,code表示查询状态(0为成功,1为失败),具体的信息有:所属国家、区域、省份、市、所属运营商。由于用unicode编码,中文保存成\u4e2d等形式,使用unicode转中文工具即可查看其中的内容。
要求,分析访问IP的所属省份(国外IP划分在一起),分析各个省份分布比例。日志中的IP先处理保存成次数+IP的格式:
代码如下:
#!/usr/bin/env python #coding:utf-8 from __future__ import division import urllib2 bs_url = " # 定义一个全局字典,用来存放最终的统计数据,保存格式{‘省份‘:{‘IP‘:次数,...},...} region_dic = { } # 用于获取IP信息的函数,并计入以上的字典 def get_data(IP,WIGHT=1): city = "" area = "" country = "" region = "" isp = "" request = urllib2.Request(bs_url+IP) reponse = urllib2.urlopen(request) #print result result = eval(reponse.read()) #print result code = result[‘code‘] country_id = result[‘data‘][‘country_id‘] #print country_id if code == 0: if country_id == ‘CN‘: city = result[‘data‘][‘city‘].decode(‘unicode-escape‘) area = result[‘data‘][‘area‘].decode(‘unicode-escape‘) country = result[‘data‘][‘country‘].decode(‘unicode-escape‘) region = result[‘data‘][‘region‘].decode(‘unicode-escape‘) isp = result[‘data‘][‘isp‘].decode(‘unicode-escape‘) else: region = u"国外" #print region if region not in region_dic.keys(): region_dic[‘%s‘%region] = { } region_dic[‘%s‘%region][‘%s‘%IP] = int(WIGHT) else: print "request error" #print "IP:%s\nCity:%s\nArea:%s\nCountry:%s\nRegion:%s\nISP:%s"%(IP,city,area,country,region,isp) if __name__ == ‘__main__‘: count = -1 ip_list = [] fo = open(‘ips.txt‘,‘r‘) # 要分析的IP保存在文件中 for line in fo.xreadlines(): wight,ip = line.strip().split() get_data(ip,wight) count += int(wight) fo.close() print u‘合计:‘ for regions,stats in region_dic.items(): times = 0 for time in stats.values(): times += time print "%s:%.2f %%"%(regions.encode(‘utf-8‘),int(times)/count)
运行结果:
注:其他可用的IP库接口:
新浪接口 http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=14.215.177.38
时间: 2024-10-03 21:54:35