C#: Webseite als HTMLDocument lesen
Mit diesem C# Code wird eine Webseite direkt in ein HTML Dokument gelesen.
Anschliessend wird ein HTML Node Element ausgewertet.
- Man erstellt ein neuen WebClient
- Dann liest man direkt den Text mit der Methode: webClient.DownloadString(address);
Uri address = new Uri("https://translate.google.com/?hl=en#de/en/Hallo");
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
//< get Website >
//*here: download as string
string sDocument=webClient.DownloadString(address);
//</ get Website >
- Anschliessend übergibt man den Text in ein HTMLDocument, welches das Dokument in eine XML Struktur mit Knoten umwandelt.
- Über SelectSingleNode erhält man den gesuchten Knoten
//----< HTMLDocument >----
var document = new HtmlDocument();
document.LoadHtml(sDocument);
//--< get result >--
//< node >
var node = document.DocumentNode.SelectSingleNode("//span[@id=\"result_box\"]");
//</ node >
//< innertext >
var output = node != null ? node.InnerText : "Error!!";
//</ innertext >
//--</ get result >--
//----</ HTMLDocument >----
|
Zur Laufzeit
Auf diese Weise erhält man rasch ein Ergebnis unter dem gesuchten HTML Element.
Mit
node.InnerText bekommt man den Text innerhalb eines Knotens.
Leider ist in diesem Beispiel der innere Inhalt leer, da Google den Inhalt mit Ajax zu einem späteren Zeitpunkt auf die Seite stellt.
Für den Webclient wird in dieser Anwendung (Visual Studio->Office Addin 2016) der Namespace: System.Net benötigt
Das HTMLDocument wird mit dem HtmlAgiltiyPack erhalten.
using System.Net;
using HtmlAgilityPack;
|
Kompletter C# Code zum Lesen der Webseite als ein kompletter String.
Anmerkung: in diesem Fall wird der Text direkt vom Webclient synchron gelesen. Für viele Anwendungen sollte der Asynchrone Empfang verwendet werden. Asynchron wird in den nächsten Beitrag verwendet.
private void btnTranslate_Click(object sender, RibbonControlEventArgs e)
{
//-------------------< btnTranslate_Click() >-------------------
//*translate sentence by sentence, paragraphs
//*like: https://translate.google.com/?hl=en#de/en/Hallo%2C%20mein%20Name%20ist%20Raimund
Uri address = new Uri("https://translate.google.com/?hl=en#de/en/Hallo");
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
//< get Website >
//*here: download as string
string sDocument=webClient.DownloadString(address);
//</ get Website >
//----< HTMLDocument >----
var document = new HtmlDocument();
document.LoadHtml(sDocument);
//--< get result >--
//< node >
var node = document.DocumentNode.SelectSingleNode("//span[@id=\"result_box\"]");
//</ node >
//< innertext >
var output = node != null ? node.InnerText : "Error!!";
//</ innertext >
//--</ get result >--
//----</ HTMLDocument >----
//-------------------</ btnTranslate_Click() >-------------------
}
|
XPath Beispiele
https://msdn.microsoft.com/de-de/library/ms256086(v=vs.110).aspx