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

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

Java代码  
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. import org.apache.commons.httpclient.HttpClient;
  4. import org.apache.commons.httpclient.NameValuePair;
  5. import org.apache.commons.httpclient.methods.PostMethod;
  6. import org.apache.commons.httpclient.params.HttpMethodParams;
  7. /**
  8. * 通过手机号码,获得该号码的归属地
  9. *
  10. * @author Administrator
  11. *
  12. */
  13. public class MobileFromUtil {
  14. //正则表达式,抽取手机归属地
  15. public static final String REGEX_GET_MOBILE=
  16. "(?is)(<tr[^>]+>[\\s]*<td[^>]+>[\\s]*卡号归属地[\\s]*</td>[\\s]*<td[^>]+>([^<]+)</td>[\\s]*</tr>)"; //2:from
  17. //正则表达式,审核要获取手机归属地的手机是否符合格式,可以只输入手机号码前7位
  18. public static final String REGEX_IS_MOBILE=
  19. "(?is)(^1[3|4|5|8][0-9]\\d{4,8}$)";
  20. /**
  21. * 获得手机号码归属地
  22. *
  23. * @param mobileNumber
  24. * @return
  25. * @throws Exception
  26. */
  27. public static String getMobileFrom(String mobileNumber) throws Exception {
  28. if(!veriyMobile(mobileNumber)){
  29. throw new Exception("不是完整的11位手机号或者正确的手机号前七位");
  30. }
  31. HttpClient client=null;
  32. PostMethod method=null;
  33. NameValuePair mobileParameter=null;
  34. NameValuePair actionParameter=null;
  35. int httpStatusCode;
  36. String htmlSource=null;
  37. String result=null;
  38. try {
  39. client=new HttpClient();
  40. client.getHostConfiguration().setHost("www.ip138.com", 8080, "http");
  41. method=new PostMethod("/search.asp");
  42. mobileParameter=new NameValuePair("mobile",mobileNumber);
  43. actionParameter=new NameValuePair("action","mobile");
  44. method.setRequestBody(new NameValuePair[] { actionParameter,mobileParameter });
  45. //设置编码
  46. method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "GB2312");
  47. client.executeMethod(method);
  48. httpStatusCode=method.getStatusLine().getStatusCode();
  49. if(httpStatusCode!=200){
  50. throw new Exception("网页内容获取异常!Http Status Code:"+httpStatusCode);
  51. }
  52. htmlSource=method.getResponseBodyAsString();
  53. if(htmlSource!=null&&!htmlSource.equals("")){
  54. result=parseMobileFrom(htmlSource);
  55. }
  56. } catch (RuntimeException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. }finally{
  60. method.releaseConnection();
  61. }
  62. return result;
  63. }
  64. /**
  65. * 从www.ip138.com返回的结果网页内容中获取手机号码归属地,结果为:省份 城市
  66. *
  67. * @param htmlSource
  68. * @return
  69. */
  70. public static String parseMobileFrom(String htmlSource){
  71. Pattern p=null;
  72. Matcher m=null;
  73. String result=null;
  74. p=Pattern.compile(REGEX_GET_MOBILE);
  75. m=p.matcher(htmlSource);
  76. while(m.find()){
  77. if(m.start(2)>0){
  78. result=m.group(2);
  79. result=result.replaceAll("&nbsp;", " ");
  80. }
  81. }
  82. return result;
  83. }
  84. /**
  85. * 验证手机号
  86. * @param mobileNumber
  87. * @return
  88. */
  89. public static boolean veriyMobile(String mobileNumber){
  90. Pattern p=null;
  91. Matcher m=null;
  92. p=Pattern.compile(REGEX_IS_MOBILE);
  93. m=p.matcher(mobileNumber);
  94. return m.matches();
  95. }
  96. /**
  97. * 测试
  98. * @param args
  99. * @throws Exception
  100. */
  101. public static void main(String[] args) throws Exception {
  102. System.out.println(getMobileFrom("13888888888"));
  103. }
  104. }

Java获取手机号码归属地相关推荐

  1. php解析手机号 归属地,PHP通过API获取手机号码归属地,api手机号码_PHP教程

    PHP通过API获取手机号码归属地,api手机号码 该API接口自 2011年 SAE平台上线稳定运行至今,增加了17号段的支持,欢迎各种采集注限制 并发10 详细使用说明 接口地址:http://a ...

  2. php根据手机号区分地址,PHP判断手机号码归属地、获取手机号码归属地

    PHP判断手机号码归属地.获取手机号码归属地: /** * 判断手机号码归属地 * @param string $phone * @param array $regions 省 * return bo ...

  3. php获取手机号码归属地

    /*** [getCityByPhone 获取用户手机号归属地]* @param [integer] $phone [手机号]* @return [array] */public function g ...

  4. java获取手机号码归属地_手机号码归属地能否取消?这些热点问题,工信部回复了...

    河南要闻 "手机号码归属地能否取消,新能源汽车电池能否统一标准,通信基站恶意低价竞标如何整治,环保设备能否让企业选得放心."随着全社会重视实体经济.发展工业和信息化的氛围更加浓厚, ...

  5. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  6. android10获取手机号码,【android,10】10.调用web服务获取手机号码归属地

    一.调用 web 服务获取号码归属地: 1.设置布局: android:layout_width="fill_parent" android:layout_height=" ...

  7. python获取手机号码归属地_Python批量获取并保存手机号归属地和运营商的示例

    从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾. import requests import json import xlrd from xlutils. ...

  8. Java 获取手机号码归属地以及运营商

    maven配置 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --><depe ...

  9. Java实现手机号码归属地

    1.pom引入 package com.singhand.back_stage.utils;import com.google.i18n.phonenumbers.PhoneNumberToCarri ...

最新文章

  1. Json 学习 JSONObject 和 JSONArray
  2. Java安全编码之用户输入
  3. ERROR 1044 (42000): Access denied for user ''@'localhost' to database
  4. python图形化编程工具哪个好_mPython(图形化编程软件) V0.5.0 官方版
  5. C#软件授权、注册、加密、解密模块源码解析并制作注册机生成license
  6. 2.10.PHP7.1 狐教程-【PHP 函数】
  7. 下标随着页面链接的跳转
  8. 哪里下载全部股票历史数据?下载全部股票历史数据怎么下?
  9. protobuf与protoc
  10. 虚拟偶像养成记:人工智能人格化与IP化打造出完美“爱豆”
  11. 反虚拟机、反沙箱技术整理汇总
  12. QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用
  13. 学猫叫用计算机歌词,抖音学猫叫是什么歌 学猫叫歌曲歌词
  14. 苹果 App Store 最贵的 App,评论亮了!!
  15. 《Python全栈系列教程》目录
  16. houdini环境变量服务器文件读不了,Windows下在普通命令行窗口里初始化Houdini环境...
  17. html css 等比例缩放(记录)
  18. MATLAB_LSB_隐藏水印和提取,附代码
  19. c# 结构体定义中有数组
  20. Isolate microTask event Isolate.spawn() compute

热门文章

  1. java毕业生设计蛋糕销售网站演示录像2020计算机源码+系统+mysql+调试部署+lw
  2. 7-5 复数四则运算
  3. Online Judge常见错误
  4. [原创]PHP 异常错误处理
  5. 基于微服务架构的餐饮系统的设计与实现计算机毕业设计源码86393
  6. java 正则 单个字符_正则表达式教程之匹配单个字符详解
  7. 200行Python实现效果逆天的连连看外挂
  8. python 彩票自动下单,从「获取数据」到「自动下单」 | 《Python量化投资入门》培训...
  9. CSS justify-content 属性
  10. 【C语言】3天速刷C语言(指针初识)