设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 760|回复: 5
打印 上一主题 下一主题

提供一个网页抓取hao123手机号码归属地的例子 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2011-4-30 12:57:47 |只看该作者 |倒序浏览
    有段时间不写博客了,最近工作压力比较大,大家在忙什么,新近安装了Win7的操作系统,感觉很不错,还体验了一把IE9,里面的开发人员工具很好用说到这个大家可以用火狐的谷歌的都行,在这个例子中我主要使用IE9自带的分析一下hao123的手机号码归属地查询的问题。
               我们先来看看下面的图片吧

       在hao123的这个界面里我们只要输入一个手机号不管是移动,联通,电信的都可以,单击查询就可以直接查询到归属地,和号码类型,网上这样的
    网站很多,我就以这个为例子吧,那我们怎么样把这些信息放到我们自己的网站上呢?
    我们先来分析一下,其实很方便,我们在IE9下打开这个界面然后在工具---开发人员工具,或是直接安f12也是一样的效果,我们安界面定位到如下图

    我们先单击网络然后单击开始捕获,这个时候我们再单击一下查询按钮看看会出现什么情况


    是不是出现两个整个,第一个很明显是加载我们所输入号归属地信息,第一个是加载一个图片,对我们没有任何用处,这里不管它,现在我们
    来单击一下第一个方法看看捕获到了什么

    URL http://vip.showji.com/locating/?m=13888888888&outfmt=json&callback=phone.callBack 很明显这是一个GEt请求,只要请求这个地址就能得到下面的结果
    phone.callBack({"Mobile":"13888888888","QueryResult":"True","Province":"云南","City":"昆明","AreaCode":"0871","PostCode":"650000","Corp":"中国移动","Card":"GSM"});
    用手机号,省,市,还有邮编,号码类型等信息。这样看的话是不是我们直接把这个地区复制到地址栏里就行了,那咱们一起来看看效果吧

    果然没错就是我们想要的东西,大家别急,其它还可以更简单,我们来看一下这个URL
    http://vip.showji.com/locating/?m=13888888888&outfmt=json&callback=phone.callBack
    如果现在我把这个RUles号码后面的删除只保留http://vip.showji.com/locating/?m=13888888888这些会出现什么情况呢?
    直接放到地址栏里试试效果

    呵呵,很神奇吧,居然得到的是一个Xml文件
    这就像是我们在调用WebServces一样简单了,我们只要写一个程序请求这个地址就可以得到我们想要的效果了。
    随便新建一个项目,一起来看一下
    我就不一步一步的分析了大家直接看我的代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;
    using System.Security.Cryptography;
    using System.Xml;

    namespace ccbText
    {
       
    public
    partial
    class Form2 : Form
        {

            
    public Form2()
            {
                InitializeComponent();
            }

            
    private
    void Form2_Load(object sender, EventArgs e)
            {
            }
          
           这个方法在这里没有用到,大家可以做为参考
            
    ///
    <summary>
    /// 传入URL返回网页的html代码
            
    ///
    </summary>
    ///
    <param name="Url">URL</param>
    ///
    <returns></returns>

    public
    string GetUrltoHtml(string Url)
            {
                StringBuilder content
    =
    new StringBuilder();

                
    try
                {
                   
    // 与指定URL创建HTTP请求
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                    request.KeepAlive
    =
    false;
                   
    // 获取对应HTTP请求的响应
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                   
    // 获取响应流
                    Stream responseStream = response.GetResponseStream();
                   
    // 对接响应流(以"GBK"字符集)
                    StreamReader sReader =
    new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                   
    // 开始读取数据
                    Char[] sReaderBuffer =
    new Char[256];
                   
    int count = sReader.Read(sReaderBuffer, 0, 256);
                   
    while (count >
    0)
                    {
                        String tempStr
    =
    new String(sReaderBuffer, 0, count);
                        content.Append(tempStr);
                        count
    = sReader.Read(sReaderBuffer, 0, 256);
                    }
                   
    // 读取结束
                    sReader.Close();
                }
                
    catch (Exception)
                {
                    content
    =
    new StringBuilder("Runtime Error");
                }

                
    return content.ToString();

            }


            
    ///
    <summary>
    /// 好123查询,符合下列规则也可使用
            
    /// 返回xml
            
    /// 需要顺序的节点:
            
    /// QueryResult(查询结果状态True,False)
            
    /// Province(所属省份)
            
    /// City(所属地区)
            
    /// Corp(服务商)
            
    /// Card(卡类型 GSM)
            
    /// AreaCode(区号)
            
    /// PostCode(邮编)
            
    ///
    </summary>
    ///
    <param name="url"></param>
    ///
    <param name="mobileNum"></param>
    ///
    <returns></returns>

    public
    static
    string[] GetInfoByxml(string url, string mobileNum)
            {
                
    try
                {
                    XmlDocument xml
    =
    new XmlDocument();
                   
    // xml.LoadXml("<?xml version='1.0' encoding='utf-8' ?><QueryResponse xmlns='http://api.showji.com/Locating/'><Mobile>15890636739</Mobile><QueryResult>True</QueryResult><Province>河南</Province><City>郑州</City><AreaCode>0371</AreaCode><PostCode>450000</PostCode><Corp>中国移动</Corp><Card>GSM</Card></QueryResponse>");
                    xml.Load(string.Format(url, mobileNum));
                    XmlNamespaceManager xmlNm
    =
    new XmlNamespaceManager(xml.NameTable);
                    xmlNm.AddNamespace(
    "content", "http://api.showji.com/Locating/");
                    XmlNodeList nodes
    = xml.SelectNodes("//content:QueryResult|//content:Mobile|//content:Province|//content:City|//content:Corp|//content:Card|//content:AreaCode|//content:PostCode", xmlNm);
                   
    if (nodes.Count ==
    8)
                    {
                        
    if ("True".Equals(nodes[1].InnerText))
                        {

                            
    return
    new
    string[] { nodes[0].InnerText, nodes[2].InnerText + nodes[3].InnerText, nodes[6].InnerText + nodes[7].InnerText, nodes[4].InnerText, nodes[5].InnerText };
                        }
                    }
                   
    return
    new
    string[] { "FALSE" };
                }
                
    catch
                {
                   
    return
    new
    string[] { "FALSE" };
                }
            }

            
    //调用方法查询数据

    private
    void button1_Click(object sender, EventArgs e)
            {
                
    foreach (string item in GetInfoByxml(" http://vip.showji.com/locating/?m={0}", txtMobile.Text.Trim()))
                {
                    richTextBox1.Text
    +=
    "__"
    + item;
                }
            }
        }
    }



    运行一下看看效果吧


    我是用Winfrom做的测试,大家如果想用Asp。Net也是一样的,把我的方法复制到你的Web页面的Cs代码下就OK了。
    好了我们的分析到这里就算是结束了,
    在这里我再给大空补充一个关于调用带有证书的网站的调用 方法
    因为带证书的都是在要验证证书文件的,我们在这里直接让他在本地回调验证,这样的话就要吧重写方法了,下在看一下回调的方法吧


    //回调验证证书问题

    public
    bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {   
    // 总是接受   

    return
    true;
            }


    其它很简单只要在 我们上面的方法GetUrltoHtml()中加入几行代码就行了,修改后的方法


    ///
    <summary>
    /// 传入URL返回网页的html代码
            
    ///
    </summary>
    ///
    <param name="Url">URL</param>
    ///
    <returns></returns>

    public
    string GetUrltoHtml(string Url)
            {
                StringBuilder content
    =
    new StringBuilder();
                
    try
                {
                   
    // 与指定URL创建HTTP请求
                    ServicePointManager.ServerCertificateValidationCallback =
    new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);//验证

                    HttpWebRequest request
    = (HttpWebRequest)WebRequest.Create(Url);
                    request.KeepAlive
    =
    false;
                    request.UserAgent
    =
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E)";
                    request.Method
    =
    "GET";
                    request.Accept
    =
    "*/*";

                   
    //创建证书文件
                    X509Certificate objx509 =
    new X509Certificate(Application.StartupPath +
    "\\123.cer");

                   
    //添加到请求里
                    request.ClientCertificates.Add(objx509);

                    HttpWebResponse response
    = (HttpWebResponse)request.GetResponse();
                   
    // 获取对应HTTP请求的响应
                   
    // 获取响应流
                    Stream responseStream = response.GetResponseStream();
                   
    // 对接响应流(以"GBK"字符集)
                    StreamReader sReader =
    new StreamReader(responseStream, Encoding.GetEncoding("GBK"));
                   
    // 开始读取数据
                    Char[] sReaderBuffer =
    new Char[256];
                   
    int count = sReader.Read(sReaderBuffer, 0, 256);
                   
    while (count >
    0)
                    {
                        String tempStr
    =
    new String(sReaderBuffer, 0, count);
                        content.Append(tempStr);
                        count
    = sReader.Read(sReaderBuffer, 0, 256);
                    }
                   
    // 读取结束
                    sReader.Close();
                }
                
    catch (Exception)
                {
                    content
    =
    new StringBuilder("Runtime Error");
                }

                
    return content.ToString();

            }


    附件: 你需要登录才可以下载或查看附件。没有帐号?注册 人人连接登陆
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    Rank: 2

    升级 
     
    0%

    该用户从未签到

    沙发
    发表于 2011-8-26 23:43:16 |只看该作者
    初来乍到,请多多关照。












    www.byelu.com  买大专文凭

    使用道具 举报

    Rank: 3Rank: 3

    升级 
     
    52.33%

    该用户从未签到

    板凳
    发表于 2011-10-6 03:33:52 |只看该作者

    使用道具 举报

    Rank: 3Rank: 3

    升级 
     
    30.33%

    该用户从未签到

    地板
    发表于 2011-10-7 22:45:08 |只看该作者
    d私服传奇,风平浪静念念不忘。七彩中变连击SF变态传奇私服发布网传奇发布网站变态私服发布超变诛仙SF‘1.85传奇仙剑传奇私服孤单旅途的独特传奇sf发布网服http://433a.com。湖北英山719612,神马第三季传奇鼎力玉成痴心妄想;举世无匹你没看透,有种熟悉传奇私服等量齐观,各执一词b珠圆玉润。
    湖南岳阳县428012,复古合成九区姐是介于牛A与牛C之间的大人博学多闻;野蛮小姐的独特见解你就有多美,各式各样轻而易举,停滞不前s以讹传讹。积攒满岸的花丶为伱守候同心专心,六神无主p积重难返。












    http://www.43919.com,http://www.BAIBZ.COM传奇私服,
    www.39ms.com减肥网,www.71TL.COM天龙八部私服
    www.ms19.com魔兽世界私服,www.B5S5.COM左旋肉碱
    www.LE76.COM广州开发票,www.WUQIJI.COM奇迹私服
    www.04my.com魔域私服,www.zx40.com诛仙私服
    www.939a.com小游戏
    焕然一新六安搜不到我的悲伤▍快马加鞭巫溪,剥极必复安徽青阳小恋曲的抑郁y出面我也要霸占你,199皓月七彩补丁撕心裂肺的痛春梦一场;面前目今过甚其实,没关系矫揉造作,漫不经心p名知無結果 總要蹤買去。纠结式面前目今,马首是瞻f面目全非。

    使用道具 举报

    Rank: 3Rank: 3

    升级 
     
    46.33%

    该用户从未签到

    5#
    发表于 2011-10-18 02:56:21 |只看该作者

    使用道具 举报

    Rank: 2

    升级 
     
    71.33%

    该用户从未签到

    6#
    发表于 2011-10-20 19:00:44 |只看该作者

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-1 19:20 , Processed in 0.110479 second(s), 53 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部