asp.net 抓取网页数据(获取网页内容——保持登录状态利用Post数据成功登录服务器应用系统)

优采云 发布时间: 2021-11-03 23:18

  asp.net 抓取网页数据(获取网页内容——保持登录状态利用Post数据成功登录服务器应用系统)

  一、获取网页内容——html

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

  需要三个类:WebRequest、WebResponse、StreamReader。

  WebRequest 和 WebResponse 的命名空间为:System.Net

  StreamReader 的命名空间为:System.IO

  核心代码

  WebRequest request = WebRequest.Create("http://www.cftea.com/");

WebResponse response = request.GetResponse();

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

  [1]WebRequest类的Create是一个静态方法,参数为要爬取的网页的URL;

  [2]Encoding 指定编码。编码有ASCII、UTF32、UTF8等通用编码属性,但没有gb2312的编码属性,所以我们使用GetEncoding获取gb2312编码。

  示例:

  

  

void Page_Load(object sender, EventArgs e)

{

try

{

WebRequest request = WebRequest.Create("http://www.baidu.com/");

WebResponse response = request.GetResponse();

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

tb.Text = reader.ReadToEnd();

reader.Close();

reader.Dispose();

response.Close();

}

catch (Exception ex)

{

tb.Text = ex.Message;

}

}

Demo

  

  二、获取网页内容-图片(文档、压缩包等二进制文件)

  不仅适用于图片,也适用于其他二进制文件。

  需要四个类:WebRequest、WebResponse、Stream、FileStream。

  WebRequest 和 WebResponse 的命名空间为:System.Net

  Stream 和 FileStream 的命名空间为:System.IO

  核心代码

  

  WebRequest request = WebRequest.Create("http://www.baidu.com/images/logo.gif");

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();

  

  注意类 Stream,而不是 StreamReader。

  示例

  

void Page_Load(object sender, EventArgs e)

{

try

{

WebRequest request = WebRequest.Create("http://www.baidu.com/images/logo.gif");

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();

tb.Text = "保存成功!";

}

catch (Exception ex)

{

tb.Text = ex.Message;

}

}

Demo

  

  三、获取网页内容-发布数据

  在获取网页数据时,有时需要通过Post将一些数据发送到服务器。在网页爬虫程序中添加如下代码,将用户名和密码发布到服务器:

  以上为gb2312编码示例:

  

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

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

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();

}

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

{

string str = reader.ReadToEnd();

reader.Close();

}

  

  四、获取网页内容阻止重定向

  获取网页时,在成功登录服务器应用系统后,应用系统可以通过Response.Redirect对网页进行重定向。如果不需要响应这个重定向,那么我们不应该发送 reader.ReadToEnd() 到 Response。 .写出来,没问题。

  五、获取网页内容-保持登录状态

  使用Post数据成功登录服务器应用系统后,我们就可以抓取到需要登录的页面,那么我们可能需要在多个Request之间保持登录状态。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线