网站内容抓取(ASP.NET中抓取网页内容-防止重定向在网页时保持登录状态 )

优采云 发布时间: 2021-09-17 12:15

  网站内容抓取(ASP.NET中抓取网页内容-防止重定向在网页时保持登录状态

)

  在中抓取网页内容非常方便,解决了中困扰我们的编码问题

  1、grab一般内容

  需要三个类:webrequest、webresponse和StreamReader

  必需的命名空间:系统。Net,系统。木卫一

  核心代码:

  webrequest类的创建是一个静态方法,参数是要捕获的网页的网址

  编码指定具有ASCII属性的编码UTF32、Utf8等通用代码,但没有GB2312编码属性,所以我们使用getencoding获得GB2312编码

  private string GetGeneralContent(string strUrl)

{

string strMsg = string.Empty;

try

{

WebRequest request = WebRequest.Create(strUrl);

WebResponse response = request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312"));

strMsg = reader.ReadToEnd();

reader.Close();

reader.Dispose();

response.Close();

}

catch

{ }

return strMsg;

}

  2、捕获图片或其他二进制文件(如文件)需要四个类:webrequest、webresponse、stream和FileStream。必需的命名空间:系统。Net和系统。木卫一。核心代码:用流读取

  private string GetFileContent(string strUrl)

{

string strMsg = string.Empty;

try

{

WebRequest request = WebRequest.Create(strUrl);

WebResponse response = request.GetResponse();

Stream reader = response.GetResponseStream();

//可根据实际保存为具体文件

FileStream writer = new FileStream("D:\\logo.gif", FileMode.OpenOrCreate, FileAccess.Write);

byte[] buff = new byte[512];

int c = 0; //实际读取的字节数

while ((c=reader.Read(buff, 0, buff.Length)) > 0)

{

writer.Write(buff, 0, c);

}

writer.Close();

writer.Dispose();

reader.Close();

reader.Dispose();

response.Close();

strMsg = "保存成功";

}

catch

{ }

return strMsg;

}

  3、crawling webpage content post模式在抓取网页时,有时需要通过post将一些数据发送到服务器。将以下代码添加到网页爬网程序,以将用户名和密码发布到服务器:

  private string GetPostContent(string strUrl)

{

string strMsg = string.Empty;

try

{

string data = "userName=admin&passwd=admin888";

byte[] requestBuffer = System.Text.Encoding.GetEncoding("gb2312").GetBytes(data);

WebRequest request = WebRequest.Create(strUrl);

request.Method = "POST";

request.ContentType = "application/x-www-form-urlencoded";

request.ContentLength = requestBuffer.Length;

using (Stream requestStream = request.GetRequestStream())

{

requestStream.Write(requestBuffer, 0, requestBuffer.Length);

requestStream.Close();

}

WebResponse response = request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312")))

{

strMsg = reader.ReadToEnd();

reader.Close();

}

}

catch

{ }

return strMsg;

}

  4、ASP.NET爬行网页内容-爬行网页时防止重定向,成功登录到服务器应用程序系统后,应用程序系统可能会通过response.redirect重定向网页。如果我们不需要对这个重定向做出响应,我们就不会给读者任何提示。Readtoend()返回响应。写5、ASP.NET抓取网页内容-保持登录状态。在使用post数据成功登录到服务器应用程序系统后,我们可以抓取页面进行登录,因此我们可能需要在多个请求之间保持登录状态。首先,我们将使用Httpwebrequest而不是webrequest。与webrequest相比,更改后的代码为:

  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);

  注意:返回的httpwebrequest.create类型仍然是webrequest,因此需要进行转换。第二,使用cookiecontainer

  System.Net.CookieContainer cc = new System.Net.CookieContainer();

request.CookieContainer = cc;

request2.CookieContainer = cc;

  通过这种方式,在request2和request2之间使用相同的会话。如果请求登录,request2也会登录

  最后,如何在不同页面之间使用相同的cookiecontainer

  要在不同页面之间使用相同的cookiecontainer,只能将cookiecontainer添加到会话中

  Session.Add("ccc", cc); //存

CookieContainer cc = (CookieContainer)Session["ccc"]; //取Session

  6、ASP.NET抓取web内容-将当前会话带到webrequest

  例如,当浏览器B1访问服务器S1时,将生成一个会话,服务器S2使用webrequest访问服务器S1,服务器S1将生成另一个会话。当前的要求是让webrequest使用浏览器B1和S1之间的会话,也就是说,让S1认为B1正在访问S1而不是S2

  这需要使用cookies。首先在S1中获取sessionid为B1的cookie,然后告诉S2 cookie,然后S2在webrequest中写入cookie

  WebRequest request = WebRequest.Create("url");

request.Headers.Add(HttpRequestHeader.Cookie, "ASPSESSIONIDSCATBTAD=KNNDKCNBONBOOBIHHHHAOKDM;");

WebResponse response = request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));

Response.Write(reader.ReadToEnd());

reader.Close();

reader.Dispose();

response.Close();

  应当指出的是:

  本文不是cookie欺骗,因为sessionid由S1告知,而不是被S2窃取。虽然这很奇怪,但它在某些特定的应用系统中可能很有用

  S1必须将会话写入B1,以便会话ID可以保存在cookie中并保持不变

  Request.cookies用于在中获取Cookie。本文假设cookies已被取出

  不同的服务器端语言在cookie中具有不同的sessionid名称。本论文是ASP

  S1不仅可以依赖sessionid来确定当前登录,还可以帮助推荐人、用户代理等,具体取决于S1端程序的设计

  实际上,本文是本系列文章中“维护登录状态”的另一种方法

  7、ASP.NET抓取web内容-如何更改源referer和useragent

  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1/index.htm");

request.Referer = "http://www.csdn.net/";

request.UserAgent = "要设置的标头";

//下一步的处理

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线