ip库处理

原创 2015年11月19日 16:37:17

原始的纯真ip库有两个问题

1、地区没有拆分国家省市区县,需要程序二次拆分

2、有一些不规范数据,即学校网吧之类的,排重手工整理


程序里的ipdata  xuexiao.csv可见http://download.csdn.net/detail/u011750989/9283149

package com.java.ipku;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class IpUtil {
	
	static String[] provinces={"北京市","天津市","上海市","重庆市","河北省","山西省","辽宁省","吉林省","黑龙江省","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","海南省","四川省","贵州省","云南省","陕西省","甘肃省","青海省","台湾省","内蒙古","广西","西藏","宁夏","新疆","香港","澳门"};
	static String[] directcitys={"北京市","天津市","上海市","重庆市"};
	
	static String[] xinjiang_key={"地区","州","市"};
	//内蒙
	static String[] nm_key={"盟","市"};
	//海南
	static String[] hn_key={"市","县"};
	static String[] other_key={"市","州"};

	public static void startSplitRegion(String region,Area area)
	{
		String country1="";
		String  province1="";
		String  city1="";
		String  subcity1="";
		//String region=ia.getRegion();
		//匹配省得到国家,ip库没有中国
		int is_china=0;
		for (String province:provinces)
		{
			Pattern pat = Pattern.compile("^"+province);
			Matcher mat = pat.matcher(region);
			
	  if (mat.find())
	  {
		//  ia.setCountry("中国");
		//  ia.setProvince(province);
		  is_china=1;
		//  System.out.println("country:"+"中国");
		 // System.out.println("province:"+province);
		  country1="中国";
		  province1=province;
		  
		  int is_drcity=0;
		  String excludeProvince=region.substring(province.length());
		  String subcity="";
		  
			for (String directcity:directcitys)
			{
				 pat = Pattern.compile("^"+directcity);
				 mat = pat.matcher(region);
				 if (mat.find())
				 {
					 is_drcity=1;
						//ia.setCity(directcity);
				//	  System.out.println("directcity:"+directcity);
				//	  System.out.println("区:"+  excludeProvince);
					  city1=directcity;
					  subcity1=excludeProvince;
						break;
				 }
				
			
			}
			if ( excludeProvince.length()>0 && is_drcity==0)
			{
				if (province.equals("新疆"))
				{
					for (String xk:xinjiang_key)
					{
						int inx=excludeProvince.indexOf(xk);
						if (inx>0)
						{
						//	ia.setCity(excludeProvince.substring(0,inx+1));
							//ia.setSubcity(excludeProvince.substring(inx+1));
					//		System.out.println("city:"+excludeProvince.substring(0,inx+1));
						//	System.out.println("Subcity:"+excludeProvince.substring(inx+1));
							city1=excludeProvince.substring(0,inx+1);
							subcity1=excludeProvince.substring(inx+1);
							
							break;
						}
					}
				}
				else if (province.equals("内蒙古"))
				{
					for (String nk:nm_key)
					{
						int inx=excludeProvince.indexOf(nk);
						if (inx>0)
						{
						//	System.out.println("city:"+excludeProvince.substring(0,inx+1));
						//	System.out.println("Subcity:"+excludeProvince.substring(inx+1));
							city1=excludeProvince.substring(0,inx+1);
							subcity1=excludeProvince.substring(inx+1);
							
							break;
						}
					}
				}
				else if (province.equals("海南省"))
				{
					for (String hn:hn_key)
					{
						int inx=excludeProvince.indexOf(hn);
						if (inx>0)
						{
							//System.out.println("city:"+excludeProvince.substring(0,inx+1));
						//	System.out.println("Subcity:"+excludeProvince.substring(inx+1));
							city1=excludeProvince.substring(0,inx+1);
							subcity1=excludeProvince.substring(inx+1);
							
							break;
						}
					}
				}
				else
				{
					for (String ok:other_key)
					{
						int inx=excludeProvince.indexOf(ok);
						if (inx>0)
						{
						//	System.out.println("city:"+excludeProvince.substring(0,inx+1));
						//	System.out.println("Subcity:"+excludeProvince.substring(inx+1));
							city1=excludeProvince.substring(0,inx+1);
							subcity1=excludeProvince.substring(inx+1);
							
							break;
						}
					}
				}
				
			}
			
			break;
	  }
	
			
		}
		
		if (is_china==0)
		 {
			//吉林市长春市 类似这种有12条记录,统一置为中国
			if (region.contains("大学") || region.contains("网吧") || region.contains("学院") || region.contains("市"))
				//System.out.println("Country:"+"中国");
				country1="中国";
			else 
				//System.out.println("Country:"+region);
				country1=region;
		 }
	//	return country1+"\t"+province1+"\t"+city1+"\t"+subcity1+"\t";
		if (city1.contains("大学") || city1.contains("网吧"))
			city1="";
		if (subcity1.contains("大学") || subcity1.contains("网吧") || subcity1.contains("宿舍"))
			subcity1="";
		
		area.setCountry1(country1);
		area.setProvince1(province1);
		area.setCity1(city1);
		area.setSubcity1(subcity1);
		
	}
	
	public static void initxuexiao(HashMap<String,Area> areamaps)
	{
		BufferedReader br=null;
		try {
			 br=new BufferedReader(new FileReader("D:\\xuexiao.csv"));
			 String line="";
			 while((line=br.readLine())!=null)
			 {
				 String[] datas=line.split(",");
				 Area area=new Area();
				 area.setCountry1(datas[1]);
				 area.setProvince1(datas[2]);
				 area.setCity1(datas[3]);
				 area.setSubcity1(datas[4]);
				 areamaps.put(datas[0], area);
				 
			 }
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	public static void main(String[] args) throws IOException
	{
	//startSplitRegion1("甘肃省兰州市");
		BufferedReader br=new BufferedReader(new FileReader("D:\\IPData.txt"));
		BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\ipku.txt"));
		String line="";
		int i=0;
		HashMap<String,Area> areamaps=new HashMap<String,Area>(500);
		initxuexiao(areamaps);
		while ((line=br.readLine())!=null)
		{
			String[] datas=line.split("\t");
			Area area=new Area();
			if (areamaps.containsKey(datas[2]))
			{
				area=areamaps.get(datas[2]);
				
			}
			else
			startSplitRegion(datas[2],area);
			
		//	System.out.println("country:"+area.getCountry1()+" province:"+area.getProvince1()+"city:"+area.getCity1()+
	//				"subcity:"+area.getSubcity1());
			bw.write(datas[0]+"\t"+datas[1]+"\t"+area.getCountry1()+"\t"+area.getProvince1()
			+"\t"+area.getCity1()+"\t"+area.getSubcity1()+"\t"+datas[2]
					);
			bw.newLine();
		//	i++;
	//		if (i>100)
		//		break;
		}
		br.close();
		bw.close();
	}

}
package com.java.ipku;

public class Area {
	public String getCountry1() {
		return country1;
	}
	public void setCountry1(String country1) {
		this.country1 = country1;
	}
	public String getProvince1() {
		return province1;
	}
	public void setProvince1(String province1) {
		this.province1 = province1;
	}
	public String getCity1() {
		return city1;
	}
	public void setCity1(String city1) {
		this.city1 = city1;
	}
	public String getSubcity1() {
		return subcity1;
	}
	public void setSubcity1(String subcity1) {
		this.subcity1 = subcity1;
	}
	private String country1="";
	private String province1="";
	private String city1="";
	private String subcity1="";

}



python自动化运维学习笔记2- 实用的IP地址处理模块IPy

2、实用的IP地址处理模块IPy 下载地址 https://pypi.python.org/packages/source/I/IPy/ 安装 python setup.py inst...
  • u012823211
  • u012823211
  • 2014年12月17日 20:06
  • 2051

是否有好用的ip地址库可以推荐

是否有好用的ip地址库可以推荐 6赞 踩收藏 目前在做一个统计分析系统,最主要的是要分析ip来源得知用户是来自那个地方,目前找到了两个库,一个是纯真IP库,这个库太过业余,我需要的效...
  • pi9nc
  • pi9nc
  • 2013年12月28日 13:49
  • 3819

淘宝IP地址库采集

作者:阿宝  更新:2016-08-31  来源:彩色世界(https://blog.hz601.org/2016/08/31/taobao-ip-sniffer/index.html) 简述当初...
  • shishuo365
  • shishuo365
  • 2016年08月31日 21:57
  • 736

使用Redis有序集合搭建自有IP定位解析库(纯真库)

网上关于IP地理位置解析的API有很多种,如IP138、百度IP定位API等,接入方便,使用简单,而且免费。缺点就是有访问次数限制。 所以有必要搭建自有的IP定位解析库。纯真库是一个比较有名的I...
  • woai0324
  • woai0324
  • 2017年05月11日 23:09
  • 707

淘宝IP地址库采集

淘宝IP地址库的优势: 1. 提供国家、省、市、县、运营商全方位信息,信息维度广,格式规范。 2. 提供完善的统计分析报表,省准确度超过99.8%,市准确度超过96.8%,数据质量有保障。...
  • shishuo365
  • shishuo365
  • 2014年08月03日 21:44
  • 2902

JAVA:实现解析纯真IP数据库

具体解析的纯真版IP地址库请详见http://lumaqq.linuxsir.org/article/qqwry_format_detail.html,这里就不多叙述了。  看下JAVA代码中怎么解...
  • a258831020
  • a258831020
  • 2015年08月05日 16:10
  • 3329

【java】 java获取IP地址(淘宝IP库接口形式)

工具类+测试方法如下: package com.gfan.yyq.yyqs.utils; import java.io.BufferedReader; import java.io.DataOutp...
  • yjqyyjw
  • yjqyyjw
  • 2016年03月31日 11:36
  • 1393

各个ip地址库对比与java实现

1.    产品篇 1.有哪些产品呢? 1.  ipip.net 官网:http://www.ipip.net/ 优势:支持离线下载,数据更新频繁,数据精确 劣势:收费如下,收费的才有经...
  • jack85986370
  • jack85986370
  • 2017年01月09日 21:51
  • 2634

数据包接收系列 — IP协议处理流程(二)

本文主要内容:在接收数据包时,IP协议的处理流程。 内核版本:2.6.37 Author:zhangskd @ csdn blog    我们接着来看数据包如何发往本地的四层协...
  • wh8_2011
  • wh8_2011
  • 2015年10月20日 09:26
  • 673

java通过淘宝IP地址库获取详细的地域信息

package com.test.util; import java.io.BufferedReader; import java.io.DataOutputStream; import...
  • ljasdf123
  • ljasdf123
  • 2014年03月28日 16:21
  • 4909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ip库处理
举报原因:
原因补充:

(最多只允许输入30个字)