国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 02:32:24
字體:
來源:轉載
供稿:網友

最近在做一個項目,其中一個功能是根據一個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;
       }

感覺寫得不是很好,先將就著用,呵呵。小編原創,轉載注明,呵呵。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延川县| 达拉特旗| 大余县| 怀集县| 从江县| 晋宁县| 溧水县| 开封市| 获嘉县| 虎林市| 望城县| 璧山县| 天峨县| 河南省| 霞浦县| 清河县| 城固县| 广东省| 汝州市| 伊通| 利辛县| 论坛| 石家庄市| 九龙县| 岳西县| 京山县| 弥渡县| 合水县| 耿马| 布尔津县| 通化县| 九龙城区| 库车县| 大足县| 偏关县| 美姑县| 如皋市| 玛多县| 长海县| 夹江县| 县级市|