htmlagilitypack und dynamischer Inhalt Problem

8

Hallo alle zusammen.

Ich möchte eine Web-Scrapper-Anwendung erstellen, und ich möchte es mit Webbrowser-Steuerelement, htmlagilitypack und XPath tun.

Im Moment habe ich es geschafft, einen xpath Generator zu erstellen (ich habe dazu einen Webbrowser benutzt), was gut funktioniert, aber manchmal kann ich nicht dynamisch (via Javascript oder Ajax) generierten Inhalt aufnehmen. Auch habe ich herausgefunden, dass wenn Webbrowser-Steuerelement (eigentlich IE-Browser) einige zusätzliche Tags wie "tbody" generiert, während wieder htmlagilitypack 'htmlWeb.Load (webBrowser.DocumentStream);' sieht es nicht.

eine weitere Notiz. Ich habe herausgefunden, dass der folgende Code tatsächlich die aktuelle Webseitenquelle erfasst, aber ich konnte damit das htmlagilitypack nicht liefern '(mshtml.IHTMLDocument3) webBrowser.Document.DomDocument;'

Können Sie mir bitte dabei helfen? Danke

    
Chyngyz Sydykov 16.04.2012, 06:17
quelle

3 Antworten

18

Ich habe gerade Stunden damit verbracht, HtmlAgilityPack dazu zu bringen, einige dynamische Ajax-Inhalte von einer Webseite zu rendern, und ich ging von einem unbrauchbaren Beitrag zum nächsten, bis ich diesen gefunden hatte.

Die Antwort ist in einem Kommentar unter dem ursprünglichen Post versteckt und ich dachte, ich sollte es aufrichten.

Dies ist die Methode, die ich anfangs verwendet habe und nicht funktioniert:

%Vor%

WebRequest wird die AJAX-Abfragen, die den fehlenden Inhalt wiedergeben, nicht rendern oder ausführen.

Dies ist die Lösung, die funktioniert hat:

%Vor%

Die Idee ist, mit dem WebBrowser zu laden, der den Ajax-Inhalt rendern kann, und dann zu warten, bis die Seite vollständig gerendert wurde, und dann die Microsoft.mshtml-Bibliothek zu verwenden, um den HTML-Code erneut in das Agilitätspaket zu packen >

Nur so konnte ich auf die dynamischen Daten zugreifen.

Ich hoffe, es hilft jemandem

    
Nick 22.02.2014 14:58
quelle
1

Würde Selenium den Trick machen. Soweit mir bekannt ist, erstellt es Instanzen von Browser-Engines ... und sollte erlauben, dass js ausgeführt wird und Ihnen erlaubt, das Ergebnis des manipulierten DOM zu erhalten.

    
Lee Englestone 06.08.2015 17:39
quelle
-4

Verwenden Sie die folgende Methode des HTML-Agility-Pack-Dokuments.

%Vor%

ODER

%Vor%     
dev 12.03.2013 08:48
quelle