2013-07-07 10 views
5

Ich versuche, eine Website zu scrappen, indem Sie in Chrome auf das HTML schauen und die Daten mit Nokogiri erfassen. Das Problem besteht darin, dass einige der Tags dynamisch generiert werden und bei Verwendung von open-uri nicht mit einer offenen (URL-) Anfrage angezeigt werden. Gibt es eine Möglichkeit, eine Website zu "zwingen", ihren Inhalt dynamisch zu generieren, damit ein Tool wie Open Uri gelesen werden kann?Dynamisch generiertes HTML mit Nokogiri/Open URI

+1

Werfen Sie einen Blick auf [mechanize] (http://mechanize.rubyforge.org/). Ich denke, es könnte tun, was du willst. – Aaronneyer

+2

Abhängig davon, wie diese Website ihren Inhalt generiert, müssen Sie möglicherweise zuerst JavaScript ausführen. – tessi

+0

Manchmal Mechanisieren in komplexen Websites blockiert. Wenn JRuby eine Option ist und Mechanize nicht funktioniert, werde ich auch auf [Celerity] (http://celerity.rubyforge.org/) schauen. – yonosoytu

Antwort

4

Wenn das Lesen über open-uri nicht den Inhalt erzeugt, den Sie benötigen, ist die Wahrscheinlichkeit groß, dass der Client Inhalt mit Javascript generiert.

Dies kann eine gute Nachricht sein - durch die Überprüfung der AJAX-Anfragen, die die Seite macht, finden Sie möglicherweise einen JSON-Feed des gesuchten Inhalts, den Sie dann direkt anfordern und analysieren können. Dadurch würden Sie Ihre Daten bekommen, ohne sich durch den HTML-Code zu graben - praktisch!

Wenn das aus irgendeinem Grund nicht funktioniert, müssen Sie die Seite mit einer Art Browser öffnen, das clientseitige Javascript ausführen lassen und dann das resultierende DOM in HTML ablegen. Etwas wie PhantomJS ist eine ausgezeichnete Wahl für diese Art von Arbeit.

+0

Tipp # 1 hat mir eine Menge Zeit gespart. –

Verwandte Themen