Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für die Verwendung von C# zum Abrufen des HTML-Quellcodes einer Webseite

Beispiel für die Verwendung von C# zum Abrufen des HTML-Quellcodes einer Webseite

高洛峰
高洛峰Original
2017-01-14 13:29:512132Durchsuche

Ich arbeite kürzlich an einem Projekt und eine der Funktionen besteht darin, den Quellcode einer Webseite basierend auf einer URL-Adresse abzurufen. In ASP.NET (C#) scheint es viele Möglichkeiten zu geben, den Quellcode einer Webseite abzurufen. Ich habe gerade einen einfachen WebClient erstellt, der sehr einfach und unkompliziert ist. Später trat jedoch ein sehr lästiges Problem auf, und zwar die verstümmelten chinesischen Schriftzeichen.

Nach sorgfältiger Untersuchung sind chinesische Webseiten nichts anderes als zwei Kodierungen: GB2312 und UTF-8. Wir haben also den folgenden Code:

       /// <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;
               }
           }
       }

Um es kurz zu erklären: WebClient wird hier verwendet, um ein WC-Objekt zu erstellen (diese Benennung ist etwas umständlich). Rufen Sie dann die DownloadData-Methode des WC-Objekts auf, übergeben Sie den URL-Wert und geben Sie ein Byte-Array zurück. Standardmäßig wird GB2312 verwendet, um dieses Byte-Array zu lesen und in einen String umzuwandeln. Suchen Sie die charakteristischen Zeichen des Codierungsformats der Webseite aus der Zeichenfolge des Quellcodes der Webseite, z. B. durch Suchen nach Informationen wie charset="utf-8", um das Codierungsformat der aktuellen Webseite zu bestimmen.

Die GetCharset-Funktion wird verwendet, um das Codierungsformat der aktuellen Webseite abzurufen. Der spezifische Code lautet wie folgt:

      /// <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;
       }


Weitere verwandte Artikel zu Beispielen für die Verwendung von C# zum Abrufen des HTML-Quellcodes von Webseiten finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn