Dienstag, 21. September 2010

HTML Quelltext einer Webseite auslesen

Der HTML Quellcode einer Internetseite lässt sich mit der Klasse WebClient auslesen. Diese stellt verschiedene Methoden zum Senden und Empfangen von Internetressourcen bereit und befindet sich im Namespace System.Net, using System.Net wird also vorrausgesetzt.
Zum Auslesen des Quellcodes können 2 Methoden verwendet werden, DownloadString(string url) und DownloadFile(string url, string filename).
Erstere lädt den Quelltext von der angegebenen Adresse herunter und gibt diesen als String zurück, zweitere speichert den HTML Code in der angegebenen Datei.
Folgendes Beispiel liest den Quelltext des RSS - Feed dieses Blogs aus:

WebClient Webclient1 = new WebClient();
string SourceCode = Webclient1.DownloadString("http://csharp-tricks.blogspot.com/feeds/posts/default?orderby=updated");

In manchen Fällen muss zur richtigen Anzeige die Kodierung geändert werden.
Der WebClient lädt die angeforderte Ressource in byte - Arrays herunter, diese werden dann mit einer bestimmten Kodierung (die häufigste ist zum Beispiel UTF-8) in eine Zeichenfolge konvertiert.
Um die Codierung zu ändern, muss vor dem Downloaden die Eigenschaft Encoding der Klasse WebClient geändert werden.

Kommentare:

  1. Hi,

    das mit dem WebClient funktioniert bei Win8 Apps leider nichtmehr.. gibt es einen anderen Weg Quelltext auszulesen?

    AntwortenLöschen
    Antworten
    1. Hi,

      was genau meinst du mit Win8 Apps?
      Dieser Post ist für Windows Forms-Anwendungen gedacht und funktioniert bei mir auch unter Windows 8.

      Löschen
    2. Dieser Kommentar wurde vom Autor entfernt.

      Löschen
    3. HttpClient hcl = new HttpClient();
      HttpResponseMessage response = hcl.GetAsync(url).Result;
      response.EnsureSuccessStatusCode();
      await responseBodyAsText = response.Content.ReadAsStringAsync(); //Das ganze in einer async methode

      Löschen
  2. Hi,
    irg wie dauert es beim ersten mal sehr lange bis der WebClient den Inhalt einer Webseite (in dem Fall einen Text) gedownloadet hat. Woran liegt das?

    MFG

    AntwortenLöschen
  3. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  4. Hallo.

    Ich hab hier mal ein Snippet für die Apps. Hab ich getestet und funktioniert einwandfrei.

    private async void GetSourceCode(string url)
    {
    HttpClient client = new HttpClient();
    var result = await client.GetStringAsync(url);
    }

    AntwortenLöschen
  5. Seit wann hat webclient eine methode namens downloadstring, vielleicht meinst du DownloadStringAsync();

    AntwortenLöschen
    Antworten
    1. Hm, also bei mir gibt es diese Methode, auf jeden Fall seit Visual Studio 2010.

      Löschen