Hallo, ich muss Daten aus HTML-Seiten auslesen. Dafür verwende ich in C# mshtml. Ich bin soweit, dass ich die HTML-Seite in Form einer HTMLDocumentClass in einer Variable vorliegen habe. Wie kann ich daraus die HTML-Elemente auslesen? Das ganze Wochenende habe ich versucht eine zusammenhängende Baumstruktur der Elemente zu finden. Aber ich komme einfach nicht weiter. Danke für eure Hilfe!
Anker-Tags sind doch die Wurzeln deiner Baumstruktur. Wenn per Anker-Tag eine HTML- oder PHP-Datei aufgerufen wird, dann hast du den nächsten Zweig... Wie das in C# geht, weiß ich nicht.
Und was ist jetzt dein Problem? - Der Aufbau der Website - Die HTMLDocumentClass - Du hast keine Ahnung von HTML - Du siehst vor lauter Wald den Baum nicht - ... HTMLDocumentClass > BODY > Children ist doch eigentlich recht straight-forward... STK500-Besitzer schrieb: > Anker-Tags sind doch die Wurzeln deiner Baumstruktur. Es geht ihm un die Elemente an sich, nicht die Navigationsstruktur und die Verlinkung per "Anker" ist in den allermeisten Fällen ganz sicher kein Baum sondern ein Graph.
:
Bearbeitet durch User
Hab das Problem gefunden. Ich habe die Baumstruktur in der Überwachung von Visual Studio gesucht. Bei COM Objekten werden diese anscheinend nicht angezeigt. Durch einen Cast kann jetzt auf den Baum zugreifen. Zum Einlesen der Struktur habe ich auf die schnelle einfach mal eine Funktion geschrieben, der ich den Body der HTML als IHTMLElement übergebe. Sie durchläuft alle ihre Kinder. Durch einen rekursiven Aufruf der Funktion werden dann von den Body-Kindern wiederum alle Kinder durchloffen. Es werden also alle Kinder und "Enkelkinder" usw. vom Body durchlaufen. Eine Verarbeitung der Daten findet nicht statt. Die HTML-Seite besitzt in etwa 40000 Elemente. Ich ging davon aus, dass die recht zügig durchloffen wären. Real hat die Durchlaufen aber um die 6 Minuten gebraucht...
1 | private static void AlleKinderDurchlaufen(IHTMLElement eltern_element) |
2 | { |
3 | foreach (IHTMLElement kind in (IHTMLElementCollection)eltern_element.children) |
4 | { |
5 | AlleKinderdurchlaufen(kind); |
6 | } |
7 | } |
Das ist für meine Anwendung alles andere als akzeptabel. Kann ich das irgendwie beschleunigen?
:
Bearbeitet durch User
Matt B. schrieb: > Die HTML-Seite besitzt in etwa 40000 Elemente. Ich ging davon aus, dass > die recht zügig durchloffen wären. Real hat die Durchlaufen aber um die > 6 Minuten gebraucht... Profiler aktivieren->schauen wo die Zeit verbraucht wird (z.B. laden des HTMLs...) Matt B. schrieb: > Das ist für meine Anwendung alles andere als akzeptabel. Kann ich das > irgendwie beschleunigen? Wenn du weißt wo die Zeit verloren geht und was du erreichen willst, kann man Tips geben. Ansonsten in der Allgemeinheit: Nein. Caching und gezieltes auswählen der Elemente würde sicher helfen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.