电话号码归属地查询——利用邮编从网络上抓取地址信息(1)

---------------------- android培训、java培训、期待与您交流! ----------------------

之前的工作已经将文本中的数据导入到了数据表中,查看一下已导入到数据表的信息(下图),我们发现其实这个表中没有我们要的地址信息,只有手机号段、电话区号、邮编号码和移动运营商的名字。但是我们知道,每个地方的固话区号和邮编是 唯一的,那么是否可以利用区号或邮编获取到地址信息呢?答案是肯定的。对于每个看到这边文章的朋友们来说这一定不是什么难事。只需到网上随便搜搜就会发现好多这样的免费服务。


我找到的服务如下图:


找到这样的服务,确实可以利用邮编查到相应的地址信息。但我们总不能从数据库中取出数据,一个个查再手动添加到数据表中吧??这样当然也可以,但效率太低,太繁琐了,还容易出错。那是否可以用程序来自动提取相应的地址信息。要回答这个问,先得知道访问的url信息,邮编号码作为查询的关键字,又是如何处理的呢???请看下图的url信息:

url

仔细分析这个url信息,不难发现,关键字邮编是紧跟“wd=”后边的,其他的字符都是固定不变的。为了验证这个问题,多查几个邮编试试,发现确实如此。知道这个规律,那就好办了。我们可以在每次提交请求时,动态的更换关键字信息就行了。再将网页内容下载到本地,再将相应的地址信息提取出来,存进数据表就行了。

那么又如何向服务器提交请求,下载网页内容呢??不知道可以问百度谷歌。通过查找网络及查看帮助,我们知道向服务器提交请求的类有:HttpWebRequest、WebRequest,其中WebRequest有相关方法:Create(string url),GetResponse().获取服务器回应的类有:HttpWebResponse、WebResponse,其中HttpWebResponse有方法GetResponseStream()用于获取网页内容的数据流。

知道了这些,那我们来试着写个向服务器发出请求,下载网页内容:

   1:  /// <summary>
   2:          /// 下载网页内容
   3:          /// </summary>
   4:          /// <param name="url"></param>
   5:          /// <returns></returns>
   6:          public string DownLoad(string mail)
   7:          {
   8:              string url = "http://opendata.baidu.com/post/s?wd="+mail+"&p=mini&rn=20";
   9:              try
  10:              {
  11:                  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  12:                  HttpWebResponse response = (HttpWebResponse)req.GetResponse();
  13:                  Stream stream = response.GetResponseStream();
  14:                  byte[] bytes = new byte[2500];
  15:                  int length = stream.Read(bytes, 0, bytes.Length);
  16:                  if (length > 0)
  17:                  {
  18:                      return Encoding.Default.GetString(bytes);
  19:                  }
  20:                  else
  21:                  {
  22:                      return "";
  23:                  }
  24:              }
  25:              catch(Exception ex)
  26:              {
  27:                  Console.WriteLine(mail + ":" + ex.Message);
  28:                  throw new Exception();
  29:              }
  30:          }

在写个程序将获取到的网页内容给存起来。如下:

   1:  /// <summary>
   2:          /// 保存网页信息
   3:          /// </summary>
   4:          /// <param name="html">网页信息参数</param>
   5:          public void SaveHtml(string html)
   6:          {
   7:              using (FileStream fw = new FileStream(@"E:\html.txt", FileMode.Create, FileAccess.Write))
   8:              {
   9:                  int length = html.Length;
  10:                  byte[] bytes = new byte[length];
  11:                  bytes = Encoding.Default.GetBytes(html);
  12:                  fw.Write(bytes, 0, bytes.Length);
  13:              }
  14:   
  15:          }

写个调用的语句来测试下:

   1:  void Test()
   2:          {
   3:              string html=DownLoad("210000");
   4:              SaveHtml(html);
   5:              MessageBox.Show("下载完成!!");
   6:          }

程序运行完成后,打开“E:\heml.txt”文件,的确下载到了页面的Html代码。只是我们会发现网页代码不全,这说明给的缓存太小了,将这句“byte[] bytes =newbyte[2500];”2500设置大点的数字就行了。

好了,关于如何下载网页文件,就到此为止了。下篇我们将解决如何从文件中提取地址信息的问题。

---------------------- android培训、java培训、期待与您交流! ----------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值