c 抓取网页数据(模拟登录,需要POST哪些数据呢?零基础!幽默!)

优采云 发布时间: 2022-03-08 17:09

  c 抓取网页数据(模拟登录,需要POST哪些数据呢?零基础!幽默!)

  抓取需要登录的页面内容的原理主要是:先模拟登录,获取cookie,然后使用这个cookie进行下次访问,就可以访问需要登录的页面了。

  理论上,浏览器能做的,程序也应该能做。

  但是,模拟登录说起来容易,但是不同的站点处理方式不同,复杂程度也不同。

  1、最简单的就是POST相应的数据,不用验证码

  2、喜欢 Discuz!系列,必须先访问某个页面,获取一个随机码,然后放到POST数据中,才能登录

  3、需要验证码。验证码识别是另一个主题。

  无论如何,需要 POST 数据。那么,要模拟登录,需要 POST 哪些数据呢?

  事实上,每个站点需要发布哪些数据是不同的,因此必须有合适的工具进行分析。我安装了firefox扩展控件:HttpFox。使用它,您可以轻松获取登录指定站点时需要提交的数据字符串。

  模拟登录的代码如下:

  //sPostData,待提交的数据串,如http://www.test.com/login.aspx?user=admin&pwd=123456        public static CookieContainer Login(string url, string sPostData, CookieContainer cc)        {            CookieContainer container = (cc == null) ? new CookieContainer() : cc;            ASCIIEncoding encoding = new ASCIIEncoding();            byte[] data = encoding.GetBytes(sPostData);            HttpWebRequest resquest = ResquestInit(url);            resquest.Method = "POST";            resquest.ContentLength = data.Length;            resquest.CookieContainer = container;            Stream newStream = resquest.GetRequestStream();            newStream.Write(data, 0, data.Length);            newStream.Close();            try            {                HttpWebResponse response = (HttpWebResponse)resquest.GetResponse();                response.Cookies = container.GetCookies(resquest.RequestUri);            }            catch{}            return container;        }//这个函数的作用就是统一Request的格式,使得每次访问目标网站都用相同的口径。如果参数不同的话,可能造成COOKIE无效,因而登录无效 public static HttpWebRequest ResquestInit(string url)        {            Uri target = new Uri(url);            HttpWebRequest resquest = (HttpWebRequest)WebRequest.Create(target);            resquest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)";            resquest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";            resquest.AllowAutoRedirect = true;            resquest.KeepAlive = true;            resquest.ReadWriteTimeout = 120000;            resquest.ContentType = "application/x-www-form-urlencoded";            resquest.Referer = url;            return resquest;        }

  获得这个CookieContainer后,保存,以后每次访问网站时随身携带。CookieContainer 相当于浏览器的cookie 容器,里面存储了访问每个网站 的cookie。

  带cookie的访问码如下:

          static HttpWebResponse GetResponse(string url, CookieContainer cc)        {            try            {                CookieContainer container = (cc == null) ? new CookieContainer() : cc;                HttpWebRequest resquest = ResquestInit(url);                resquest.CookieContainer = container;                HttpWebResponse response = (HttpWebResponse)resquest.GetResponse();                response.Cookies = container.GetCookies(resquest.RequestUri);                return response;            }            catch            {                return null;            }        }

  参数CookieContainer cc 是保存的CookieContainer。

  跟大家分享一下我老师的人工智能教程。零基础!容易明白!幽默风趣!还有*敏*感*词*笑话!希望你也加入我们的 AI 团队!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线