C# 抓取网页内容
1、抓取一般内容
需要三个类:WebRequest、WebResponse、StreamReader
所需命名空间:System.Net、System.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 中有属性 ASCII、UTF32、UTF8 等全球通用的编码,但没有 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 抓取网页内容-图片
需要四个类:WebRequest、WebResponse、Stream、FileStream。
示例:
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. }
4 抓取网页内容-防止重定向
在抓取网页时,成功登录服务器应用系统后,应用系统可能会通过 Response.Redirect 将网页进行重定向,如果不需要响应这个重定向,那么,我们就不要把 reader.ReadToEnd() 给 Response.Write 出来,就可以了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论