使用C#擷取網頁HTML源碼的例子

來源:互聯網
上載者:User
最近在做一個項目,其中一個功能是根據一個URL地址,擷取到網頁的原始碼。在ASP.NET(C#)中,擷取網頁原始碼貌似有很多種方法,我隨便搞了一個簡單的WebClient,非常簡單容易。但後面一個非常惱火的問題出來了,那就是中文的亂碼。

通過仔細研究,中文的網頁不外乎GB2312和UTF-8這兩種編碼。於是有了下面這段代碼:

       /// <summary>       /// 根據網址的URL,擷取原始碼HTML       /// </summary>       /// <param name="url"></param>       /// <returns></returns>       public static string GetHtmlByUrl(string url)       {           using (WebClient wc = new WebClient())           {               try               {                   wc.UseDefaultCredentials = true;                   wc.Proxy = new WebProxy();                   wc.Proxy.Credentials = CredentialCache.DefaultCredentials;                   wc.Credentials = System.Net.CredentialCache.DefaultCredentials;                   byte[] bt = wc.DownloadData(url);                   string txt = System.Text.Encoding.GetEncoding("GB2312").GetString(bt);                   switch (GetCharset(txt).ToUpper())                   {                       case "UTF-8":                           txt = System.Text.Encoding.UTF8.GetString(bt);                           break;                       case "UNICODE":                           txt = System.Text.Encoding.Unicode.GetString(bt);                           break;                       default:                           break;                   }                   return txt;               }               catch (Exception ex)               {                   return null;               }           }       }

稍微解釋一下,這裡使用了WebClient建立了一個wc對象(這命名有點尷尬了)。然後調用wc對象的DownloadData方法,傳入URL值,返回一個位元組數組。預設使用GB2312來讀取這個位元組數組,把它轉換成字串。從網頁原始碼的字串中尋找網頁的編碼格式的特徵字元,如找到charset="utf-8"這樣的資訊,來判斷當前網頁的編碼格式。

GetCharset這個函數就是來擷取當前網頁的編碼格式的,具體代碼如下:

      /// <summary>       /// 從HTML中擷取擷取charset       /// </summary>       /// <param name="html"></param>       /// <returns></returns>       public static string GetCharset(string html)       {           string charset = "";           Regex regCharset = new Regex(@"content=[""'].*\s*charset\b\s*=\s*""?(?<charset>[^""']*)", RegexOptions.IgnoreCase);           if (regCharset.IsMatch(html))           {               charset = regCharset.Match(html).Groups["charset"].Value;           }           if (charset.Equals(""))           {               regCharset = new Regex(@"<\s*meta\s*charset\s*=\s*[""']?(?<charset>[^""']*)", RegexOptions.IgnoreCase);               if (regCharset.IsMatch(html))               {                   charset = regCharset.Match(html).Groups["charset"].Value;               }           }           return charset;       }


更多使用C#擷取網頁HTML源碼的例子相關文章請關注topic.alibabacloud.com!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.