Wie kann ich eine Tabelle scrapen, die mit JavaScript in c # erstellt wird

c# html-agility-pack html-table webclient

Frage

Ich versuche, einen Tisch von der Webseite https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/ mit HtmlAgilityPack zu bekommen.

Mein Code ist so weit

WebClient webClient = new WebClient();
        string page = webClient.DownloadString("https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/");

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(page);

        List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@class='list_result Result']")
                    .Descendants("tr")
                    .Skip(1)
                    .Where(tr => tr.Elements("td").Count() > 1)
                    .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
                    .ToList();

Mein Problem ist, dass die Webseite die Tabelle mit JavaScript erstellt und wenn ich versuche, sie zu lesen, wird eine Null-Ausnahme ausgelöst, weil die Webseite anzeigt, dass ich JavaScript aktivieren muss.

Ich habe auch versucht, "GET" -Methode zu verwenden

 string Url = "https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url);
myRequest.Method = "GET";
            WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
            myResponse.Close();

mit den gleichen Ergebnissen. Ich aktiviere JavaScript bereits im Internet Explorer und ändere auch die Registrierung

if (Environment.Is64BitOperatingSystem)
        Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
    else  //For 32 bit machine
        Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);

Wenn ich eine WebBrowser-Komponente verwende, kann ich die Webseite ohne Probleme sehen, aber ich kann die Tabelle immer noch nicht auflisten.

Akzeptierte Antwort

F12 ist dein Freund in jedem Browser.

Wählen Sie die Registerkarte Netzwerk und Sie werden feststellen, dass alle Informationen in dieser Datei enthalten sind:

https://www.belastingdienst.nl/data/douane_wisselkoersen/wks.douane.wisselkoersen.dd201806.xml

(Ich nehme an, dass die Daten für Juli 2018 in einer URL namens * .dd201807.xml gespeichert werden)

Wenn Sie C # verwenden, müssen Sie einen GET-Befehl für diese URL ausführen und ihn als XML analysieren, ohne HtmlAgilityPack verwenden zu müssen. Sie müssen das aktuelle Jahr mit dem aktuellen Monat verkettet erstellen, um die richtige URL auszuwählen.

Leuker kan ich nicht mehr maken!


Beliebte Antwort

Der WebClient ist ein HTTP-Client und kein Webbrowser. Daher wird JavaScript nicht ausgeführt. Was benötigt wird, ist ein kopfloser Webbrowser. Auf dieser Seite finden Sie eine Liste kopfloser Webbrowser. Ich habe jedoch keinen von ihnen ausprobiert, daher kann ich Ihnen hier keine Empfehlung geben:

Headless Browser für C # (.NET)?




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum