#

C#: Webseite asynchron lesen mit Webclient
 
Man kann mit C# eine Webseite auswerten, indem man einen sogenannten Webclient erstellt, eine Webadresse eingibt und anschließend die Seite als Text herunterlädt.
Anschließend kann man den Text in eine XML Struktur umwandeln und die einzelnen Knoten auswerten.
 
Dieses Beispiel zeigt das Lesen der Webseite mit einem asynchronen Download des Textes. Damit das Programm sich während der Ausführung nicht in einer Warteschlaufe auflöst und somit andere Prozesse sperrt, sollte der Download als asynchroner Vorgang ausgeführt werden.
Eine asychrone Ausführung bedeutet beim Webclient, dass man den Event webClient.DownloadStringCompleted zuvor definiert und anschließend den Download startet.

//< get Website >
//*here: download as string
webClient.DownloadStringCompleted += WebClient_DownloadStringCompleted;
webClient.DownloadStringAsync(address);
//</ get Website >
 

 
 

 
Nach dem Starten des Downloads kommt das Programm erst dann zurück, wenn der Download beendet ist.
Während dessen können andere Prozesse weiterhin ausgeführt werden.

private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//-------------------< WebClient_DownloadStringCompleted() >-------------------
..Download completed
..code..
//-------------------</ WebClient_DownloadStringCompleted() >-------------------
}

 
Nach dem Download lädt man das Ergebnis in eine HTML Struktur mit der Methode .LoadHtml(string).
“DownloadString” bedeutet, dass das Ergebnis des Webclients selbst ein String ist.

var document = new HtmlDocument();
document.LoadHtml(e.Result);
 

 
Das somit erhaltene HTMLDocument kann dann nach Knoten und HTMLElementen ausgewertet werden.

var node = document.DocumentNode.SelectSingleNode("//span[@id=\"result_box\"]");
var output = node != null ? node.InnerText : e.Error.Message;
 

 

 
Video Tutorial

 
Betrifft: WPF, WinForms, UWP(abgeändert), HTMLDocument, HTMLAgilityPack
 
 
Kompletter Code in C# zum  Verwenden:

private void get_Document_Webclient_async(string url)
{
//-------------------< get_Document_Webclient_async() >-------------------
//*url like: https://translate.google.com/?hl=en#de/en/Hallo
//result is in the event: WebClient_DownloadStringCompleted
 
Uri address = new Uri(url);
 
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
 
//< get Website >
//*here: download as string
webClient.DownloadStringCompleted += WebClient_DownloadStringCompleted;
webClient.DownloadStringAsync(address);
//</ get Website >
 
//----</ HTMLDocument >----
 
//-------------------</ get_Document_Webclient_async() >-------------------
}
 
 
private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//-------------------< WebClient_DownloadStringCompleted() >-------------------
//< check >
if (e.Error != null)
{
var output = e.Error.Message;
}
//</ check >
else if (e.Result != null)
{
var document = new HtmlDocument();
document.LoadHtml(e.Result);
 
var node = document.DocumentNode.SelectSingleNode("//span[@id=\"result_box\"]");
var output = node != null ? node.InnerText : e.Error.Message;
 
}
//-------------------</ WebClient_DownloadStringCompleted() >-------------------
}

 
Mobile

.

123movies