`
guoyunsky
  • 浏览: 859814 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
3d3a22a0-f00f-3227-8d03-d2bbe672af75
Heritrix源码分析
浏览量:207332
Group-logo
SQL的MapReduce...
浏览量:0
社区版块
存档分类
最新评论

Java获取手机号码归属地

    博客分类:
  • java
阅读更多

      工作过程中抓取了很多手机号码,现需要获取他们的归属地。于是自己写了个工具类,这个工具类只是基本了实现该功能,没有考虑其他因素。

      我知道手机号码归属地的判断是根据前7位,一开始本想获取他们的规律,就是哪个号码段的手机是属于哪个地区,但发现自己无法获取。于是想到了有一些网站有这个功能,同时自己也写爬虫,于是利用爬虫的思路去完成这个功能。这里大概思路是通过HttpClient去模拟提交那些网站的查询功能,这里是www.ip138.com,然后通过正则表达式去解析HttpClient相应内容,从里面抽取出手机归属地。同时对要查询的手机进行一个验证,具体代码请看如下:

   

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
/**
 * 通过手机号码,获得该号码的归属地
 * 
 * @author Administrator
 *
 */
public class MobileFromUtil {
	//正则表达式,抽取手机归属地
	public static final String REGEX_GET_MOBILE=
		"(?is)(<tr[^>]+>[\\s]*<td[^>]+>[\\s]*卡号归属地[\\s]*</td>[\\s]*<td[^>]+>([^<]+)</td>[\\s]*</tr>)"; //2:from
	//正则表达式,审核要获取手机归属地的手机是否符合格式,可以只输入手机号码前7位
	public static final String REGEX_IS_MOBILE=
		"(?is)(^1[3|4|5|8][0-9]\\d{4,8}$)";
	
	/**
	 * 获得手机号码归属地
	 * 
	 * @param mobileNumber
	 * @return
	 * @throws Exception
	 */
	public static String getMobileFrom(String mobileNumber) throws Exception {
		if(!veriyMobile(mobileNumber)){
			throw new Exception("不是完整的11位手机号或者正确的手机号前七位");
		}
		HttpClient client=null;
		PostMethod method=null;
		NameValuePair mobileParameter=null;
		NameValuePair actionParameter=null;
		int httpStatusCode;
		
		String htmlSource=null;
		String result=null;
		
		
		try {
			client=new HttpClient();
			client.getHostConfiguration().setHost("www.ip138.com", 8080, "http");
			method=new PostMethod("/search.asp");
			mobileParameter=new NameValuePair("mobile",mobileNumber);
			actionParameter=new NameValuePair("action","mobile");
			method.setRequestBody(new NameValuePair[] { actionParameter,mobileParameter }); 
			//设置编码
			method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "GB2312");
			
			client.executeMethod(method);
			httpStatusCode=method.getStatusLine().getStatusCode();
			if(httpStatusCode!=200){
				throw new Exception("网页内容获取异常!Http Status Code:"+httpStatusCode);
			}
			
			htmlSource=method.getResponseBodyAsString();
			if(htmlSource!=null&&!htmlSource.equals("")){
				result=parseMobileFrom(htmlSource);
			}
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			method.releaseConnection();
		}
		
		return result;
		
	}


	/**
	 * 从www.ip138.com返回的结果网页内容中获取手机号码归属地,结果为:省份 城市
	 * 
	 * @param htmlSource
	 * @return
	 */
	public static String parseMobileFrom(String htmlSource){
		Pattern p=null;
		Matcher m=null;
		String result=null;
		
		p=Pattern.compile(REGEX_GET_MOBILE);
		m=p.matcher(htmlSource);
		
		while(m.find()){
			if(m.start(2)>0){
				result=m.group(2);
				result=result.replaceAll("&nbsp;", " ");
			}
		}
		
		
		return result;
		
	}
	
	/**
	 * 验证手机号
	 * @param mobileNumber
	 * @return
	 */
	public static boolean veriyMobile(String mobileNumber){
		Pattern p=null;
		Matcher m=null;
		
		p=Pattern.compile(REGEX_IS_MOBILE);
		m=p.matcher(mobileNumber);
		
		return m.matches();
	}
	
	/**
	 * 测试
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		System.out.println(getMobileFrom("13888888888"));
	}

}

 

更多技术文章、感悟、分享、勾搭,请用微信扫描:

5
2
分享到:
评论
3 楼 jimmee 2014-03-25  
呵呵, 做爬虫的思路果然一样.

我也是想找规律, 这样不用调用外部的请求拿地址了, 但是一些手机号码, 如果是隐私的话, 调用外部接口有泄漏的风险.

实在没办法, 才调用外部接口查询吧.
2 楼 gyh_han 2012-02-20  
程序运行有问题呢,断点调试一下46行之后直接跳到67行,然后就是空指针异常,求解!
1 楼 crabboy 2010-05-12  
提供了不错的思路

相关推荐

    Java获取手机号码归属地的实现

    Java获取手机号码归属地的实现 Java获取手机号码归属地的实现是指通过Java语言获取手机号码的归属地信息,包括手机号码的国家代码、地区代码、运营商信息等。这种实现对发送短信、电话营销、客户关系管理等业务具有...

    java 调用 360 api 接口实现批量查询手机号码归属地

    在本场景中,我们将讨论如何使用Java语言调用360提供的API接口来实现批量查询手机号码的归属地。360作为知名的互联网安全公司,提供了一系列的API服务,其中包括查询电话号码信息的功能。 首先,我们需要了解Java中...

    Java根据手机号获取归属地

    填入手机号码,获取手机号码归属地

    Android获取手机号码归属地

    在Android平台上,获取手机号码归属地是一项常见的需求,特别是在开发涉及通信或用户验证的应用时。本文将详细讲解如何实现这一功能。 首先,我们要明白手机号码的归属地信息通常包括运营商(如中国移动、中国联通...

    java实现手机归属地查询

    本项目以Java编程语言为核心,实现了对手机号码归属地的查询功能。以下是对这一技术的详细阐述: 首先,我们要理解手机归属地查询的基本原理。通常,手机运营商会为每个手机号分配一个特定的区号和网络代码,这些...

    java 手机号码归属地查询代码

    可以通过在项目中添加此 form的代码,查询号码归属地

    用Java解析手机号获取手机信息(归属地、Sim卡类型、移动或是联通、区号、邮编)

    在Java编程领域,有时我们需要获取手机号的相关信息,如归属地、SIM卡类型、运营商(移动或联通)、区号和邮编等。这通常涉及到手机号码的解析和查询工作。在这个场景下,我们可以利用公开的API或者数据库来实现这些...

    手机号码归属地查询JAVA项目

    《JAVA实现手机号码归属地查询项目详解》 手机号码归属地查询是信息技术领域常见的功能,尤其是在移动通信服务、市场营销和数据分析等行业中。本项目利用JAVA编程语言,旨在为用户提供便捷的手机号码归属地查询服务...

    手机号码归属地查询

    7. **实时性**:手机号码归属地可能会因用户迁移或运营商调整而发生变化,因此查询服务需要能够获取最新的数据。这可能需要Web Service提供者定期更新数据库或者实时同步数据。 8. **API调用限制**:为了防止滥用,...

    手机号码归属地数据库

    手机号码归属地数据库是一种用于查询和分析手机号码所属地信息的数据库系统,它包含了大量手机号码与它们对应的城市、区县、运营商等详细信息。在IT行业中,这种数据库通常被用于电话营销、客户服务、欺诈检测等多种...

    手机号码归属地——到城市

    在IT行业中,手机号码归属地查询是一项常见的服务,它能够帮助用户识别来电号码的来源,通常用于来电显示软件的开发。这项技术涉及到数据库管理和数据处理等多个领域的知识。 首先,我们来了解一下“手机号码归属地...

    手机号码归属地数据 424210条2019.2.15

    手机号码归属地采集工具的设计和实现涉及到编程语言(如Python、Java)、网络请求库、数据解析和存储等技术。开发者需要理解HTTP协议,能够处理反爬机制,同时要合理组织数据结构,以便后续的数据分析和处理。 总的...

    手机号码归属地查询软件

    手机号码归属地查询软件是一种常见的实用工具,它能够帮助用户获取特定手机号码的所属地信息。这类软件在日常生活中有着广泛的应用,例如帮助用户识别未知来电、防止骚扰电话或者进行市场营销数据分析。开源性质的...

    最新全国手机号码归属地数据库(每月更新一次)

    全国手机号码归属地数据库是一个非常实用的资源,尤其对于那些从事电信分析、市场营销或客户服务的IT专业人士来说。这个数据库每月更新一次,确保了数据的新鲜度和准确性,这对于跟踪和理解用户行为至关重要。 首先...

    本地的手机号码归属地查询-oracle数据

    数据收集是指从运营商处获取手机号码与归属地的对应关系,这可能涉及到与运营商的合作或者购买合法的数据服务。查询系统则是设计一个用户界面或API接口,允许用户输入手机号码并返回其归属地信息。 Oracle数据库是...

    三大运营商手机号码归属地查询jar

    标题中的“三大运营商手机号码归属地查询jar”指的是一个Java应用程序,它允许用户查询中国移动、中国联通和中国电信这三大中国运营商的手机号码归属地信息。这个程序可能是为了帮助个人或企业了解电话号码的来源,...

    手机号码归属地最新数据库

    手机号码归属地数据库是IT行业中一个重要的数据资源,主要用于提供手机号码所属的地理位置信息。这个数据库包含15万3千多条记录,涵盖了最新的151、155、157这三种号码段,这些都是由中国电信运营的189号段的子号段...

    呼叫系统获取手机归属地

    在IT行业中,呼叫系统获取手机归属地是一项常见的功能,它主要应用于外呼系统,以便于企业或服务提供商在与客户沟通时了解对方的基本信息。这项技术涉及到多个领域的知识,包括但不限于电话通信、数据库管理、API...

    百度API手机号码归属地查询demo

    总结,百度API手机号码归属地查询服务结合HttpTest文件,提供了一个便捷的方法来获取手机号码的归属地信息。开发者需要熟悉API的使用、HTTP请求的构建以及响应的解析,以确保功能的正确实现和有效测试。

    最新手机号码归属地数据库423766条(EXCEl使用方法)

    手机号码归属地数据库的TXT版本可能以特定的分隔符(如逗号、制表符)将数据字段分开,用户可以通过编程语言(如Python、Java)或文本编辑器读取和解析这些数据。 3. **SQL数据集**:SQL是结构化查询语言,用于管理...

Global site tag (gtag.js) - Google Analytics