c#抓取网页数据(保险起见输入账号密码)
优采云 发布时间: 2021-10-21 20:13c#抓取网页数据(保险起见输入账号密码)
4.输入账号密码,确认登录,得到如下数据:
关注POST请求中的Url和postdata,以及服务器返回的cookies
cookie 收录登录信息。为安全起见,我们可以将所有 4 个 cookie 值都传递给服务器。
首先给出C#发送POST请求的代码:(目的是获取服务器返回的cookie)
string Url = "URL";
string postDataStr = "POST Data";//因为上面都是离散的键值对,我们可以从Stream中直接找到postDataStr
//登录并获取cookie
HttpPost(Url, postDataStr, ref cookie);
private string HttpPost(string Url, string postDataStr, ref CookieContainer cookie)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
byte[] postData = Encoding.UTF8.GetBytes(postDataStr);
request.ContentLength = postData.Length;
request.CookieContainer = cookie;
Stream myRequestStream = request.GetRequestStream();
myRequestStream.Write(postData, 0, postData.Length);
myRequestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = cookie.GetCookies(response.ResponseUri);
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
有了cookie之后,就可以从网站中抓取自己需要的数据,下一步就是发送GET请求
因为服务器返回的是html,如何从大量的html中快速获取到需要的信息?在这里,我们可以参考一个高效强大的第三方库NSoup(网上也有人推荐使用htmlparser,但通过我个人的对比,htmlparser在效率和简单性上都远不如NSoup)
由于NSoup的网上教程比较好,也可以参考JSoup的教程:
最后,给我一些我从 网站 抓取的数据:
纸上谈兵,我知道我必须亲自去做。