特别是怎么实现用户登陆网站后抓取登陆的页面数据,想知道怎么实现程序登陆。做过的朋友可以指点下给,谢谢!

解决方案 »

  1.   

    你可以用HttpWebRequest
    他可以模拟登陆
    下面我自己的网站里的例子
    用来实现模拟提交获取违章查询的...
    希望对你有用
    网址是  http://www.yocs.cn/Weizhang.aspxprivate string a(string filename)
            {
                HttpWebRequest request = WebRequest.Create("http://www.csjxj.com/validateimg.php") as HttpWebRequest;
                request.Referer = "http://www.csjxj.com/wzcx.php";
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1)";
                request.Method = WebRequestMethods.File.DownloadFile;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*";
                request.CookieContainer = new CookieContainer();
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream stream = response.GetResponseStream();
               
                FileStream FS = new FileStream(Server.MapPath(filename), FileMode.Create, FileAccess.ReadWrite);
                BinaryWriter write = new BinaryWriter(FS, Encoding.Default);
                BinaryReader reader = new BinaryReader(stream, Encoding.Default);
                byte[] bs = new byte[256];
                while (reader.Read(bs, 0, 256) > 0)
                {
                    write.Write(bs);
                }
                reader.Close();
                write.Close();
                FS.Close();
                FS.Dispose();
                stream.Close();
                response.Close();
                return request.CookieContainer.GetCookieHeader(new Uri("http://www.csjxj.com"));
            }[AcceptVerbs(HttpVerbs.Get)]
            public ActionResult Weizhang()
            {
                string filename = "/Weizhang/" + Guid.NewGuid().ToString().Replace("-", String.Empty) + ".bmp";
                ViewData["iCodePath"] = filename;
                //CookieContainer _CookieContainer = request.CookieContainer.;
                TempData["YOCS_COOKIE"] = a(filename);
                ViewData["Content"] = "";
                return View();
            }        [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Weizhang(FormCollection form)
            {
                HttpWebRequest request = WebRequest.Create("http://www.csjxj.com/wzcx.php") as HttpWebRequest;            string postString = String.Format(@"cp={0}&type={1}&cj={2}&s_validate={3}&Submit2={4}",
                                                HttpUtility.UrlEncode(form["fChepai"], Encoding.GetEncoding("GB2312")),
                                                form["fType"],
                                                form["fFadongji"],
                                                form["fCode"],
                                                HttpUtility.UrlEncode("提交", Encoding.GetEncoding("GB2312")));
                byte[] postData = Encoding.ASCII.GetBytes(postString);
                request.ContentLength = postData.Length;            request.KeepAlive = true;
                request.AllowAutoRedirect = false;
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.SetCookies(new Uri("http://www.csjxj.com/wzcx.php"), TempData["YOCS_COOKIE"].ToString());
                request.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                request.Method = "post";
                request.Referer = "http://www.csjxj.com/wzcx.php";
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CIBA; .NET4.0C; .NET4.0E)";
                request.ContentType = "application/x-www-form-urlencoded";            Stream S = request.GetRequestStream();
                S.Write(postData, 0, postData.Length);
                S.Close();            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                
                Stream ST = response.GetResponseStream();
                StreamReader r = new StreamReader(ST, Encoding.GetEncoding("GB2312"));
                String content = r.ReadToEnd();
                string source = content;
                response.Close();
                content = Regex.Match(content, @"<td colspan=5>([\s\S]+?)</td>", RegexOptions.IgnoreCase).Groups[1].Value;            if (content.IsEmpty() || content.IsMatch(@"^\s*$"))
                {
                    content = Regex.Match(source, @"<table width=""510"" border=1 align=""center"" style=""word-break:break-all;"" cellspacing=""1"" bordercolorlight=""#FFFFFF"" bordercolordark=""#03599C"" cellpadding=""1"" height=""20"">[\s\S]+?</table>", RegexOptions.IgnoreCase).Value;
                }
                ViewData["Content"] = content;
                string filename = "/Weizhang/" + Guid.NewGuid().ToString().Replace("-", String.Empty) + ".bmp";
                ViewData["iCodePath"] = filename;
                //CookieContainer _CookieContainer = request.CookieContainer.;
                TempData["YOCS_COOKIE"] = a(filename);            return View();
            }
      

  2.   

    忘记说了.....
    他需要你访问后的session的
    所以,这个,和你登陆也是一样的道理的.....你只要加一个networkcreditial就行了
      

  3.   

    他那个是用asp.net mvc做的,这个和本问题没有直接联系
      

  4.   


    using System.Web;/// <summary>
        /// 根据链接地址 获取 Html文本
        /// </summary>
        public static string Get_Html(string Url)
        {
            System.Net.WebClient wc = new System.Net.WebClient();
            Byte[] pageData = wc.DownloadData(Url );
            wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
            return System.Text.Encoding.Default.GetString(pageData);
        }
      

  5.   

    http://topic.csdn.net/u/20100529/12/6ff4d5cb-995a-4723-83e4-883cb54c3f0c.html
    我写的!
    不过没写完!
    懒的写了!
    可以看怎么抓数据!
      

  6.   

    【zhao_zps】如果需要登陆的网站该怎么实现呢?
      

  7.   

    你可以传COOKIE进去
    http://hi.baidu.com/panyuan1988/blog/item/b1904e955538d46154fb96f7.html