2010-04-19 19 views
18

Ich möchte einen Web-Crawler schreiben, der JavaScript interpretieren kann. Grundsätzlich ist es ein Programm in Java oder PHP, das eine URL als Eingabe nimmt und den DOM-Baum ausgibt, der der Ausgabe im Firebug HTML-Fenster ähnlich ist. Das beste Beispiel ist Kayak.com, wo Sie nicht sehen können, dass das resultierende DOM im Browser angezeigt wird, wenn Sie "Quelle anzeigen", aber das resultierende HTML durch Firebug speichern können.Web-Crawler, der JavaScript interpretieren kann

Wie würde ich das machen? Welche Werkzeuge gibt es, die mir helfen könnten?

+3

"erfassen" Sie könnten Webkit verwenden. – Seth

+15

Kühl. Was ist deine Frage? –

+0

Ich möchte einen Web-Crawler schreiben, der JavaScript-Code auf der Seite ausführen kann, die ich crawlen möchte. Zum Beispiel haben einige Seiten JavaScript-Code, um die Seite mit Daten von einem AJAX-Aufruf oder von einem JavaScript-Array zu füllen. Wenn Sie diese Seiten in FireFox öffnen und auf Ansicht -> Seitenquelle klicken, sehen Sie nicht das vollständige HTML-DOM, das Sie im Browserfenster sehen.Aber wenn Sie Firebug Plugin installiert haben, können Sie Firebug öffnen, klicken Sie auf HTML-Registerkarte, klicken Sie im Debug-Fenster auf und klicken Sie auf "HTML kopieren" und fügen Sie es in einen Texteditor, sehen Sie das HTML-DOM vom JavaScript-Code generiert . – user320662

Antwort

2

Sie sind eher in Java erfolgreich als in PHP. Es gibt einen bereits vorhandenen Javascript-Interpreter für Java mit der Bezeichnung Rhino. Es ist eine Referenzimplementierung und gut dokumentiert.

Rhino wird in vielen vorhandenen Java-Apps verwendet, um JavaScript-Scripting-Funktionen innerhalb der App bereitzustellen. Ich habe auch davon gehört, dass es bei der Durchführung automatisierter Tests in Javascript half.

Ich weiß auch, dass Java Code enthält, der HTML analysieren und rendern kann, obwohl jemand, der mehr über Java als ich weiß, wahrscheinlich mehr darüber beraten kann. Ich leugne nicht, dass es sehr schwierig sein würde, so etwas zu erreichen; Sie würden im Wesentlichen vieles, was ein Browser tut, wieder implementieren.

+0

hi thomasrutter, danke für den Zeiger, aber ich denke, Rhino ist eine JavaScript-Engine und wahrscheinlich muss ich einen Prototyp-Browser mit Rhino als JavaScript-Engine zum Crawlen einer schweren JavaScript-Seite erstellen. Bitte korrigieren Sie mich, wenn ich falsch liege – user320662

+0

Java enthält auch HTML Parsing/Rendering Fähigkeiten. Jemand, der mehr über Java als ich weiß, könnte damit vielleicht besser beraten - mein Wissen endet hier. – thomasrutter

5

Ich habe HtmlUnit (Java) verwendet. Dies wurde ursprünglich für Unit-Testseiten entwickelt. Es ist nicht perfekt Javascript, aber es hat mich in meiner eingeschränkten Nutzung nicht gescheitert. Laut der Website, kann es die folgenden JS-Frameworks auf ein vernünftiges Maß laufen:

  • jQuery 1.2.6
  • MochiKit 1.4.1
  • GWT 2.0.0
  • Sarissa 0.9.9.3
  • MooTools 1.2.1
  • Prototype 1.6.0
  • Ext JS 2.2
  • Dojo 1.0.2
  • YUI 2.3.0
+0

Müssen Sie Java kennen, um es mit einem PHP-Skript zu verwenden? –

+0

Sie müssen Java damit verwenden. Obwohl Sie versuchen können, eine selenbasierte Lösung für PHP zu verwenden. – Jeff

6

Rubys Capybara ist ein Integrationstest-Bibliothek, aber es kann auch zu schreiben, stand-alone eingesetzt werden web- Crawler. Da es Backends wie Selen oder ohne Kopf WebKit verwendet, interpretiert sie Javascript out-of-the-box:

require 'capybara/dsl' 
require 'capybara-webkit' 

include Capybara::DSL 
Capybara.current_driver = :webkit 
Capybara.app_host = "http://www.google.com" 
page.visit("/") 
puts(page.html) 
1

einen Blick Geben Sie hier: http://snippets.scrapy.org/snippets/22/ es ist ein Python-Screen Scraping und Web-Crawling-Rahmen mit webdrivers verwendet zum Öffnen eine Seite, render all die Dinge, die Sie brauchen und gibt Ihnen die Möglichkeiten, alles, was Sie wollen auf der Seite über