怎么根据一个网站地址获取到该网站的PR值? 
或者说可以提供一个查询PR值的网站,我可以编写代码后台获取他的PR值,
但是现在查询网站PR值的网站查询出来的数据都是使用JS实现的,我后台察看他的网页源代码就看不到这个数据!

解决方案 »

  1.   


    新建页面:Default.aspx
    在该页面上添加控件:TextBox1 及 Button1 Label1
     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Net;
    using System.IO;public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            
             string responseFromServer = "";
             CheckSum cs = new CheckSum();
             string s = cs.CalculateChecksum(TextBox1.Text);
             HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(@"http://www.google.cn/search?client=navclient-auto&features=Rank:&q=info:" + TextBox1.Text + "&ch=" + s);
             HttpWReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
             HttpWReq.Accept = @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*";
             HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
             Stream dataStream = HttpWResp.GetResponseStream();
             StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.GetEncoding("GB2312"));
             responseFromServer = reader.ReadToEnd();
             string[] sp = responseFromServer.Split(':');
             if (sp.Length == 3)
                Label1.Text = "查询成功! PR = " + sp[2].ToString();
             else
                Label1.Text = "查询失败!";
        }
    }
      

  2.   

    接上文
    新建类:CheckSum.cs
    using System;
       public class CheckSum
        {
            public CheckSum()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            uint GOOGLE_MAGIC = 0xE6359A60;        private uint zeroFill(uint a, int b)
            {
                checked
                {
                    uint z = 0x80000000;
                    if (Convert.ToBoolean(z & a))
                    {
                        a = (a >> 1);
                        a &= (~z);
                        a |= 0x40000000;
                        a = (a >> (b - 1));
                    }
                    else
                    {
                        a = (a >> b);
                    }
                }
                return a;
            }        private uint[] mix(uint a, uint b, uint c)
            {
                a -= b; a -= c; a ^= (uint)(zeroFill(c, 13));
                b -= c; b -= a; b ^= (uint)(a << 8);
                c -= a; c -= b; c ^= (uint)(zeroFill(b, 13));
                a -= b; a -= c; a ^= (uint)(zeroFill(c, 12));
                b -= c; b -= a; b ^= (uint)(a << 16);
                c -= a; c -= b; c ^= (uint)(zeroFill(b, 5));
                a -= b; a -= c; a ^= (uint)(zeroFill(c, 3));
                b -= c; b -= a; b ^= (uint)(a << 10);
                c -= a; c -= b; c ^= (uint)(zeroFill(b, 15));            return new uint[3] { a, b, c };
            }        private uint GoogleCH(uint[] url, uint length, uint init)
            {
                if (length == 0)
                {
                    length = (uint)url.Length;
                }
                uint a, b;
                a = b = 0x9E3779B9;
                uint c = init;
                int k = 0;
                uint len = length;
                uint[] m_mix = new uint[3];
                while (len >= 12)
                {
                    a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
                    b += (uint)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
                    c += (uint)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
                    m_mix = mix(a, b, c);
                    a = m_mix[0]; b = m_mix[1]; c = m_mix[2];                k += 12;
                    len -= 12;
                }            c += length;            switch (len)              /* all the case statements fall through */
                {
                    case 11:
                        {
                            c += (uint)(url[k + 10] << 24);
                            c += (uint)(url[k + 9] << 16);
                            c += (uint)(url[k + 8] << 8);
                            b += (uint)(url[k + 7] << 24);
                            b += (uint)(url[k + 6] << 16);
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 10:
                        {
                            c += (uint)(url[k + 9] << 16);
                            c += (uint)(url[k + 8] << 8);
                            b += (uint)(url[k + 7] << 24);
                            b += (uint)(url[k + 6] << 16);
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 9:
                        {
                            c += (uint)(url[k + 8] << 8);
                            b += (uint)(url[k + 7] << 24);
                            b += (uint)(url[k + 6] << 16);
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    /* the first byte of c is reserved for the length */
                    case 8:
                        {
                            b += (uint)(url[k + 7] << 24);
                            b += (uint)(url[k + 6] << 16);
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 7:
                        {
                            b += (uint)(url[k + 6] << 16);
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 6:
                        {
                            b += (uint)(url[k + 5] << 8);
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 5:
                        {
                            b += (uint)(url[k + 4]);
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 4:
                        {
                            a += (uint)(url[k + 3] << 24);
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 3:
                        {
                            a += (uint)(url[k + 2] << 16);
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 2:
                        {
                            a += (uint)(url[k + 1] << 8);
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    case 1:
                        {
                            a += (uint)(url[k + 0]);
                            break;
                        }
                    /* case 0: nothing left to add */
                }
                m_mix = mix(a, b, c);
                /*-------------------------------------------- report the result */
                return m_mix[2];
            }    
      

  3.   

    接上文:
        private uint GoogleCH(string url, uint length)
            {
                uint[] m_urluint = new uint[url.Length];
                for (int i = 0; i < url.Length; i++)
                {
                    m_urluint[i] = url[i];
                }
                return GoogleCH(m_urluint, length, GOOGLE_MAGIC);
            }        private uint GoogleCH(string sURL)
            {
                return GoogleCH(sURL, 0);
            }
            private uint GoogleCH(uint[] url, uint length)
            {
                return GoogleCH(url, length, GOOGLE_MAGIC);
            }        private uint[] c32to8bit(uint[] arr32)
            {
                uint[] arr8 = new uint[arr32.GetLength(0) * 4 + 3];            for (int i = 0; i < arr32.GetLength(0); i++)
                {
                    for (int bitOrder = i * 4; bitOrder <= i * 4 + 3; bitOrder++)
                    {
                        arr8[bitOrder] = arr32[i] & 255;
                        arr32[i] = zeroFill(arr32[i], 8);
                    }
                }
                return arr8;
            }
            //新算法,ToolBar 版本>>=2.0.114
            public string CalculateChecksum(string sURL)
            {
                uint ch = GoogleCH("info:" + sURL);            ch = (((ch / 7) << 2) | (((uint)(ch % 13)) & 7));            uint[] prbuf = new uint[20];
                prbuf[0] = ch;
                for (int i = 1; i < 20; i++)
                {
                    prbuf[i] = prbuf[i - 1] - 9;
                }
                ch = GoogleCH(c32to8bit(prbuf), 80);            return string.Format("6{0}", ch);
            }
            //老算法,ToolBar 版本<2.0.114
            public string CalculateChecksumOld(string sURL)
            {
                uint ch = GoogleCH("info:" + sURL);            string CalculateChecksum = "6" + Convert.ToString((ch));
                return CalculateChecksum;
            }
        }