C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
来源:互联网 发布:佟晨洁和谢晖 知乎 编辑:程序博客网 时间:2024/05/21 17:36
获取网页数据有很多种方式。在这里主要讲述通过WebClient、WebBrowser和HttpWebRequest/HttpWebResponse三种方式获取网页内容。
这里获取的是包括网页的所有信息。如果单纯需要某些数据内容。可以自己构造函数甄别抠除出来!一般的做法是根据源码的格式,用正则来过滤出你需要的内容部分。
一、通过WebClient获取网页内容
这是一种很简单的获取方式,当然,其它的获取方法也很简单。在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域。大概写法如下
//MemoryStream是一个支持储存区为内存的流。 byte[] buffer = new byte[1024]; using (MemoryStream memory = new MemoryStream()) { int index = 1, sum = 0; while (index * sum < 100 * 1024) { index = reader.Read(buffer, 0, 1024); if (index > 0) { memory.Write(buffer, 0, index); sum += index; } } //网页通常使用utf-8或gb2412进行编码 Encoding.GetEncoding("gb2312").GetString(memory.ToArray()); if (string.IsNullOrEmpty(html)) { return html; } else { Regex re = new Regex(@"charset=(? charset[/s/S]*?)[ |']"); Match m = re.Match(html.ToLower()); encoding = m.Groups[charset].ToString(); } if (string.IsNullOrEmpty(encoding) || string.Equals(encoding.ToLower(), "gb2312")) { return html; }}好了,现在进入正题,WebClient获取网页数据的代码如下
//using System.IO; try { WebClient webClient = new WebClient(); webClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据 Byte[] pageData = webClient.DownloadData("http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml"); //string pageHtml = Encoding.Default.GetString(pageData); //如果获取网站页面采用的是GB2312,则使用这句 string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句 using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本 { htm = sw.ToString();//测试StreamWriter流的输出状态,非必须 sw.Write(pageHtml); } } catch (WebException webEx) { Console.W }
二、通过WebBrowser控件获取网页内容
相对来说,这是一种最简单的获取方式。拖WebBrowser控件进去,然后匹配下面这段代码
WebBrowser web = new WebBrowser();web.Navigate("http://www.163.com");web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){ WebBrowser web = (WebBrowser)sender; HtmlElementCollection ElementCollection = web.Document.GetElementsByTagName("Table"); foreach (HtmlElement item in ElementCollection) { File.AppendAllText("Kaijiang_xj.txt", item.InnerText); }}
三、使用HttpWebRequest/HttpWebResponse获取网页内容
这是一种比较通用的获取方式。
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); } }
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- 【转载】C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- C# HttpWebRequest\HttpWebResponse\WebClient发送请求解析json数据
- c# HttpWebRequest与HttpWebResponse请求网页和返回网页教程
- HttpWebRequest与HttpWebResponse进行数据采集时的注意点
- [C#]基于HttpWebRequest和HttpWebResponse的自动登录采集
- C#网页数据采集(三)HttpWebRequest
- HttpWebRequest 和 HttpWebResponse 的应用 (网页下载)
- HttpWebRequest 和 HttpWebResponse 的应用 (网页下载)
- 使用HttpWebRequest与HttpWebResponse抓取网页数据
- RegisterStartupScrip,webclient,httpwebrequest和httpwebresponse,IsAuthenticated, XMLHttpRequest,Micros
- C#网页数据采集(二)WebBrowser
- HttpWebRequest 和 HttpWebResponse 的应用
- http和https进行数据 采集使用.net类 httpwebrequest和httpwebresponse
- C# Get请求数据 WebClient和HttpWebRequest获取HTML代码
- C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest
- 转 c# HttpWebRequest与HttpWebResponse请求网页和返回网页教程
- C 语言的谜题01-转载
- 小实现了 生产真-消费者 用于多线程
- C 语言的谜题02-转载
- ubuntu下安装ulipad-转载
- CentOS忘记密码
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- 现在上下班路上好辛苦!
- 2010-10-19 mark一下
- 转贴:一个英国记者的惊叹(转载)
- tf-idf
- 在windows机器上远程登录ubuntu
- 我太穷了!
- UNIX环境高级编程的编译问题
- 转载:在Ubuntu9.10下安装和简单配置trac0.12dev