C# 抓取网页内容
1、抓取一般内容
需要三个类:WebRequestWebResponseStreamReader
所需命名空间:System.NetSystem.IO
核心代码:
view plaincopy to clipboardprint?
1. WebRequest request = WebRequest.Create("www.cftea/"); 
2. WebResponse response = request.GetResponse(); 
3. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312")); 
      WebRequest 类的 Create 为静态方法,参数为要抓取的网页的网址;
      Encoding 指定编码,Encoding 中有属性 ASCIIUTF32UTF8 等全球通用的编码,但没有 gb2312 这个编码属性,所以我们使用 GetEncoding 获得 gb2312 编码。
示例:
view plaincopy to clipboardprint?
1. <%@ Page Language="C#" %> 
2. <%@ Import Namespace="System.Net" %> 
3. <%@ Import Namespace="System.IO" %> 
4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
5. <mce:script runat="server"><!-- 
6.     void Page_Load(object sender, EventArgs e) 
7.     { 
8.         try 
9.         { 
10.             WebRequest request = WebRequest.Create("www.cftea/"); 
11.             WebResponse response = request.GetResponse(); 
12.             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312")); 
13.              
14. printform            tb.Text = reader.ReadToEnd(); 
15.              
16.             reader.Close(); 
17.             reader.Dispose(); 
18.             response.Close(); 
19.         } 
20.         catch (Exception ex) 
21.         { 
22.             tb.Text = ex.Message; 
23.         } 
24.     } 
25. // --></mce:script> 
26. <html xmlns="/1999/xhtml" > 
27. <head runat="server"> 
28.     <title>抓取网页内容 - 千一网络</title> 
29. </head> 
30. <body> 
31.     <form id="form1" runat="server"> 
32.     <div> 
33.     <asp:TextBox ID="tb" runat="server" Width="500" Height="300" TextMode="multiLine"></asp:TextBox> 
34.     </div> 
35.     </form> 
36. </body> 
37. </html> 
 2 抓取网页内容-图片
    需要四个类:WebRequestWebResponseStreamFileStream
  示例:
view plaincopy to clipboardprint?
1. <%@ Page Language="C#" %> 
2. <%@ Import Namespace="System.Net" %> 
3. <%@ Import Namespace="System.IO" %> 
4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
5. <mce:script runat="server"><!-- 
6.     void Page_Load(object sender, EventArgs e) 
7.     { 
8.         try 
9.         { 
10.             WebRequest request = WebRequest.Create("www.cftea/images/logo.gif"); 
11.             WebResponse response = request.GetResponse(); 
12.             Stream reader = response.GetResponseStream(); 
13.              
14.             FileStream writer = new FileStream("D:\\logo.gif", FileMode.OpenOrCreate, File
Access.Write); 
15.             byte[] buff = new byte[512]; 
16.             int c = 0; //实际读取的字节数 
17.             while ((c=reader.Read(buff, 0, buff.Length)) > 0) 
18.             { 
19.                 writer.Write(buff, 0, c); 
20.             } 
21.             writer.Close(); 
22.             writer.Dispose(); 
23.              
24.             reader.Close(); 
25.             reader.Dispose(); 
26.             response.Close(); 
27.              
28.             tb.Text = "保存成功!"; 
29.         } 
30.         catch (Exception ex) 
31.         { 
32.             tb.Text = ex.Message; 
33.         } 
34.     } 
35. // --></mce:script> 
36. <html xmlns="/1999/xhtml" > 
37. <head runat="server"> 
38.     <title>抓取网页图片并保存 - 千一网络</title> 
39. </head> 
40. <body> 
41.     <form id="form1" runat="server"> 
42.     <div> 
43.     <asp:TextBox ID="tb" runat="server" Width="500" Height="300" TextMode="multiLine"></asp:TextBox> 
44.     </div> 
45.     </form> 
46. </body> 
47. </html> 
3 抓取网页内容-Post 数据
  在抓取网页时,有时候,需要将某些数据通过 Post 的方式发送到服务器,将以下代码添加在网页抓取的程序中,以实现将用户名和密码 Post 到服务器
view plaincopy to clipboardprint?
1. string data = "userName=admin&passwd=admin888"; 
2. byte[] requestBuffer = System.Text.Encoding.GetEncoding("gb2312").GetBytes(data); 
3.  
4. request.Method = "POST"; 
5. request.ContentType = "application/x-www-form-urlencoded"; 
6. request.ContentLength = requestBuffer.Length; 
7. using (Stream requestStream = request.GetRequestStream()) 
8.
9.     requestStream.Write(requestBuffer, 0, requestBuffer.Length); 
10.     requestStream.Close(); 
11.
12.  
13. using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312"))) 
14.
15.     string str = reader.ReadToEnd(); 
16.     reader.Close(); 
17.
抓取网页内容-防止重定向
在抓取网页时,成功登录服务器应用系统后,应用系统可能会通过 Response.Redirect 将网页进行重定向,如果不需要响应这个重定向,那么,我们就不要把 reader.ReadToEnd() Response.Write 出来,就可以了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。