---------------------- android培训、java培训、期待与您交流! ----------------------
之前的工作已经将文本中的数据导入到了数据表中,查看一下已导入到数据表的信息(下图),我们发现其实这个表中没有我们要的地址信息,只有手机号段、电话区号、邮编号码和移动运营商的名字。但是我们知道,每个地方的固话区号和邮编是 唯一的,那么是否可以利用区号或邮编获取到地址信息呢?答案是肯定的。对于每个看到这边文章的朋友们来说这一定不是什么难事。只需到网上随便搜搜就会发现好多这样的免费服务。
我找到的服务如下图:
找到这样的服务,确实可以利用邮编查到相应的地址信息。但我们总不能从数据库中取出数据,一个个查再手动添加到数据表中吧??这样当然也可以,但效率太低,太繁琐了,还容易出错。那是否可以用程序来自动提取相应的地址信息。要回答这个问,先得知道访问的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培训、期待与您交流! ----------------------