Daten auf Website auslesen, nach Javascript Ausführung?

01/24/2014 20:03 desTenshi#1
Hi there,

aus Übungszwecken habe ich die Tage angefangen ein Programm zu schreiben, welches Daten von einer Website auslesen soll. Das ganze habe ich in Ruby geschrieben und mit Nokogiri realisiert. So hole ich mir also den Quelltext der Seite und parse den HTML Quelltext. Beim ersten Versuch klappte es auch ohne größere Probleme. Allerdings beim zweiten Versuch (also eine andere Seite!), bin ich auf das Problem gestoßen das die gewünschten Daten teilweise mit Javascript generiert werden.

Nun stell ich mir die Frage, was ist die beste / einfachste Methode um eben dieses Javascript bevor ich die Seite parse auszuführen? Habe bis jetzt nur noch ruby only Lösungen gesucht, allerdings noch nichts gefunden.

Wenn jemand einen Lösungsansatz oder ähnliches hat wäre echt hilfreich ^^

MfG
01/25/2014 13:15 Gildarts'#2
Im Prinzip musst du warten, bis der DOM Baum vollständig generiert wurde und JS und PHP ihren Job erledigt haben. Ich hab schnell mal nach Lösungen mit Nokogiri gesucht und [Only registered and activated users can see links. Click Here To Register...] hier gefunden. Bin mir nicht sicher, ob es das ist, was du suchst.
01/26/2014 01:08 desTenshi#3
Quote:
Originally Posted by Gildarts' View Post
Im Prinzip musst du warten, bis der DOM Baum vollständig generiert wurde und JS und PHP ihren Job erledigt haben. Ich hab schnell mal nach Lösungen mit Nokogiri gesucht und [Only registered and activated users can see links. Click Here To Register...] hier gefunden. Bin mir nicht sicher, ob es das ist, was du suchst.
Das Problem ist, das Nokogiri gar kein JS ausführen kann. Ich hab das Problem über den Umweg mit watir nun mittlerweile gelöst.
Watir nutzt einen Browser um die Website aufzurufen und entsprechend das Javascript auszuführen. Danach kann man sich vom watir Objekt den HTML Quelltext der Seite holen und diesen wieder wie gewohnt mit Nokogiri parsen.
Das ganze sieht in etwa so aus :

Code:
require 'nokogiri'
require 'watir-webdriver'

browser = Watir::Browser.new :firefox # z.B.
browser.goto "www.google.de"
doc = Nokogiri::HTML.parse(browser.html)
Schon hat man richtigen Quelltext. Das ganze lässt sich auch noch headless realisieren, ist allerdings etwas aufwendiger und lohnte sich in meinem Fall gerade nicht, daher habe ich mir das ganze noch nicht angeschaut.

lieben Gruß
desTenshi