C#读取网页内容主要有使用WebClient和使用HttpWebResponse两种方法,下面我分别写了两种方法以做示例。
其中将内容输出到文件中的方法,若不了解需先阅读:
1 public class WebCrawler
2 {
3 /// <summary>
4 /// 使用WebClient,将指定网址的内容输出到指定文件内
5 /// </summary>
6 /// <param name="url">网址</param>
7 /// <param name="path">输出文件路径</param>
8 /// <param name="encoding">文件编码格式</param>
9 public void GetContextByClient(string url, string path, Encoding encoding)
10 {
11 WebClient MyWebClient = new WebClient();
12 //获取或设置用于向Internet资源的请求进行身份验证的网络凭据
13 MyWebClient.Credentials = CredentialCache.DefaultCredentials;
14 //从指定网站下载数据
15 byte[] pageData = MyWebClient.DownloadData(url);
16 //使用指定字符集,转换为字符串
17 string pageHtml = encoding.GetString(pageData);
18 //在控制台输出获取的内容
19 Console.WriteLine(pageHtml);
20 //写入文件
21 System.IO.File.WriteAllBytes(path, pageData);
22 }
23 /// <summary>
24 /// 使用HttpWebResponse,将指定网址的内容输出到指定文件内
25 /// </summary>
26 /// <param name="url">网址</param>
27 /// <param name="path">输出文件路径</param>
28 /// <param name="encoding">文件编码格式</param>
29 public void GetContextByHttp(string url, string path, Encoding encoding)
30 {
31 Uri httpURL = new Uri(url);
32 //HttpWebRequest类继承于WebRequest,并没有自己的构造函数
33 //需通过WebRequest的Creat方法建立,并进行强制的类型转换
34 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(httpURL);
35 ///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换
36 HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();
37 //GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容
38 //若成功取得网页的内容,则以System.IO.Stream形式返回,
39 //若失败则产生ProtoclViolationException错误。
40 // 在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理
41 Stream respStream = httpResp.GetResponseStream();
42 ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以
43 ///StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾
44 StreamReader respStreamReader = new StreamReader(respStream, encoding);
45 string context = respStreamReader.ReadToEnd();
46 respStream.Close();
47 StreamWriter sw = new StreamWriter(path, false, encoding);
48 sw.Write(context);
49 }
50 }