C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
获取网页数据有很多种方式。在这里主要讲述通过WebClient、WebBrowser和HttpWebRequest/HttpWebResponse三种方式获取网页内容。
这里获取的是包括网页的所有信息。如果单纯需要某些数据内容。可以自己构造函数甄别抠除出来!一般的做法是根据源码的格式,用正则来过滤出你需要的内容部分。
一、通过WebClient获取网页内容这是一种很简单的获取方式,当然,其它的获取方法也很简单。在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域。大概写法如下
public void GetHtml() { var url = "http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml"; string strBuff = "";//定义文本字符串,用来保存下载的html int byteRead = 0; HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); //若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理 Stream reader = webResponse.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8) StreamReader respStreamReader = new StreamReader(reader,Encoding.UTF8); ///分段,分批次获取网页源码 char[] cbuffer = new char[1024]; byteRead = respStreamReader.Read(cbuffer,0,256); while (byteRead != 0) { string strResp = new string(char,0,byteRead); strBuff = strBuff + strResp; byteRead = respStreamReader.Read(cbuffer,0,256); } using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本 { htm = sw.ToString();//测试StreamWriter流的输出状态,非必须 sw.Write(strBuff); } }