日韩欧美人妻无码精品白浆,夜夜嗨AV免费入口,国产欧美官网在线看,高校回应聋哑女生因长相完美被质疑

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#網(wǎng)頁采集數(shù)據(jù)的幾種方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)

admin
2017年2月16日 16:25 本文熱度 7255

獲取網(wǎng)頁數(shù)據(jù)有很多種方式。在這里主要講述通過WebClient、WebBrowser和HttpWebRequest/HttpWebResponse三種方式獲取網(wǎng)頁內(nèi)容。

這里獲取的是包括網(wǎng)頁的所有信息。如果單純需要某些數(shù)據(jù)內(nèi)容。可以自己構(gòu)造函數(shù)甄別摳除出來!一般的做法是根據(jù)源碼的格式,用正則來過濾出你需要的內(nèi)容部分。

一、通過WebClient獲取網(wǎng)頁內(nèi)容

這是一種很簡單的獲取方式,當(dāng)然,其它的獲取方法也很簡單。在這里首先要說明的是,如果為了實(shí)際項(xiàng)目的效率考慮,需要考慮在函數(shù)中分配一個(gè)內(nèi)存區(qū)域。大概寫法如下

[csharp] view plain copy
 print?
  1. //MemoryStream是一個(gè)支持儲存區(qū)為內(nèi)存的流。  
  2.  byte[] buffer = new byte[1024];  
  3.  using (MemoryStream memory = new MemoryStream())  
  4.     {  
  5.     int index = 1, sum = 0;  
  6.     while (index * sum < 100 * 1024)  
  7.     {  
  8.        index = reader.Read(buffer, 0, 1024);  
  9.        if (index > 0)  
  10.        {  
  11.            memory.Write(buffer, 0, index);  
  12.             sum += index;  
  13.        }  
  14.     }  
  15.     //網(wǎng)頁通常使用utf-8或gb2412進(jìn)行編碼  
  16.     Encoding.GetEncoding("gb2312").GetString(memory.ToArray());  
  17.     if (string.IsNullOrEmpty(html))  
  18.     {  
  19.         return html;  
  20.     }  
  21.     else  
  22.     {  
  23.         Regex re = new Regex(@"charset=(? charset[/s/S]*?)[ |'']");  
  24.         Match m = re.Match(html.ToLower());  
  25.         encoding = m.Groups[charset].ToString();  
  26.     }  
  27.     if (string.IsNullOrEmpty(encoding) || string.Equals(encoding.ToLower(), "gb2312"))  
  28.     {  
  29.        return html;  
  30.     }  
  31. }  
好了,現(xiàn)在進(jìn)入正題,WebClient獲取網(wǎng)頁數(shù)據(jù)的代碼如下
[csharp] view plain copy
 print?
  1. //using System.IO;  
  2. try  
  3. {  
  4.     WebClient webClient = new WebClient();  
  5.     webClient.Credentials = CredentialCache.DefaultCredentials;//獲取或設(shè)置用于向Internet資源的請求進(jìn)行身份驗(yàn)證的網(wǎng)絡(luò)憑據(jù)  
  6.     Byte[] pageData = webClient.DownloadData("http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml");  
  7.     //string pageHtml = Encoding.Default.GetString(pageData);  //如果獲取網(wǎng)站頁面采用的是GB2312,則使用這句         
  8.     string pageHtml = Encoding.UTF8.GetString(pageData); //如果獲取網(wǎng)站頁面采用的是UTF-8,則使用這句  
  9.     using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//將獲取的內(nèi)容寫入文本  
  10.     {  
  11.         htm = sw.ToString();//測試StreamWriter流的輸出狀態(tài),非必須  
  12.         sw.Write(pageHtml);  
  13.     }  
  14. }  
  15. catch (WebException webEx)  
  16. {  
  17.     Console.W  
  18. }  

二、通過WebBrowser控件獲取網(wǎng)頁內(nèi)容

相對來說,這是一種最簡單的獲取方式。拖WebBrowser控件進(jìn)去,然后匹配下面這段代碼

[csharp] view plain copy
 print?
  1. WebBrowser web = new WebBrowser();  
  2. web.Navigate("http://www.163.com");  
  3. web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);  
  4. void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  5. {  
  6.      WebBrowser web = (WebBrowser)sender;  
  7.      HtmlElementCollection ElementCollection = web.Document.GetElementsByTagName("Table");  
  8.      foreach (HtmlElement item in ElementCollection)  
  9.      {  
  10.          File.AppendAllText("Kaijiang_xj.txt", item.InnerText);  
  11.      }  
  12. }  

三、使用HttpWebRequest/HttpWebResponse獲取網(wǎng)頁內(nèi)容

這是一種比較通用的獲取方式。

[csharp] view plain copy
 print?
  1. public void GetHtml()  
  2.      {  
  3.          var url = "http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml";  
  4.          string strBuff = "";//定義文本字符串,用來保存下載的html  
  5.          int byteRead = 0;   
  6.            
  7.          HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);  
  8.          HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();  
  9.          //若成功取得網(wǎng)頁的內(nèi)容,則以System.IO.Stream形式返回,若失敗則產(chǎn)生ProtoclViolationException錯 誤。在此正確的做法應(yīng)將以下的代碼放到一個(gè)try塊中處理。這里簡單處理   
  10.          Stream reader = webResponse.GetResponseStream();  
  11.          ///返回的內(nèi)容是Stream形式的,所以可以利用StreamReader類獲取GetResponseStream的內(nèi)容,并以StreamReader類的Read方法依次讀取網(wǎng)頁源程序代碼每一行的內(nèi)容,直至行尾(讀取的編碼格式:UTF8)  
  12.          StreamReader respStreamReader = new StreamReader(reader,Encoding.UTF8);  
  13.   
  14.          ///分段,分批次獲取網(wǎng)頁源碼  
  15.          char[] cbuffer = new char[1024];  
  16.          byteRead = respStreamReader.Read(cbuffer,0,256);  
  17.   
  18.          while (byteRead != 0)  
  19.          {  
  20.              string strResp = new string(char,0,byteRead);  
  21.              strBuff = strBuff + strResp;  
  22.              byteRead = respStreamReader.Read(cbuffer,0,256);  
  23.          }  
  24.          using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//將獲取的內(nèi)容寫入文本  
  25.          {  
  26.              htm = sw.ToString();//測試StreamWriter流的輸出狀態(tài),非必須  
  27.              sw.Write(strBuff);  
  28.          }  
  29.      }  


該文章在 2017/2/16 16:25:49 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved