2009-10-23 9 views
5

Wie der Titel schon sagt, habe ich einige DOM-Manipulationsaufgaben. Zum Beispiel möchte ich: - finden alle H1-Elemente, die blaue Farbe haben. - finden Sie alle Texte, die Größe 12px haben. - etc ..Wie man DOM mit Ruby on Rails manipuliert

Wie kann ich es mit Rails machen? Danke

.. :)

aktualisieren

Ich habe einige der Forschung über das Extrahieren Webseiteninhalt wurde dies zu tun, basierend auf papier->http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

Die Zusammenfassung der Schritt ist:

  1. Holen Sie sich die Web-URL, die ich extrahiert werden soll (einzelne Webseite)
  2. einige Elemente aus der Web-Seite greifen auf einige visual rules (Ex: greifen alle H1, die blaue Farbe haben)
  3. Prozess die Elemente mit meinem Algorithmus
  4. speichern das Ergebnis in meiner Datenbank.

-Sorry für mein schlechtes english-

+0

Könnten Sie bitte erweitern auf das, was Sie versuchen zu erreichen (was Sie tun), so dass ich mehr spezifische Beratung für Ihr Problem anbieten? Vielen Dank. –

+0

Basierend auf Ihrer aktualisierten, würde ich empfehlen, Ihre Frage zu etwas wie zu ändern: "Wie man ein HTML-Dokument basierend auf visuellen Kriterien mit Ruby parst" –

Antwort

1

Um zuverlässig aussortieren, welche Farbe ein beliebiges Element auf einer Webseite ist, würden Sie umkehren benötigen einen Browser Ingenieur (um genau zu berücksichtigen Sheets, Markup-Hacks übernehmen, kaputte Tags, Bilder usw.).

Ein viel einfacherer Ansatz wäre, einen vorhandenen Browser wie gecko in eine benutzerdefinierte Anwendung Ihrer Herstellung einzubetten.

Da Ihre Spinne Seiten durchsuchen würde, würde es sie an Ihre eingebettete Instanz von Gecko übergeben, wo Sie getComputedStyle verwenden könnten, um zu ziehen, welche Farbe ein einzelnes Element passiert.

Ursprünglich wollten Sie Ruby on Rails für dieses Projekt verwenden, Rails ist ein Framework zum Schreiben von Präsentationsanwendungen und wirklich schlecht für ein Projekt wie dieses.

Als Ausgangspunkt würde ich Ihnen empfehlen, RubyGnome und insbesondere RubyGnome Gtk::MozEmbed Funktionalität zu überprüfen.

+0

Danke, Mike. Funktioniert es auch mit CSS-Eigenschaft? Zum Beispiel: Ich möchte nur H1 auswählen, die blau sind. – andrisetiawan

+0

Das ist nicht, was das OP will. Er möchte die gesamte Verarbeitung auf der Serverseite durchführen, nicht in JavaScript. –

+0

Ich habe meine Antwort vor seinem Update (als es schien, dass er eine clientseitige Lösung wollte) gepostet. –

8

Wenn Sie HTML-Dokumente in einer Rails-Anwendung bearbeiten möchten, sollten Sie einen Blick auf Nokogiri werfen.

Es verwendet XPath, um das Dokument zu durchsuchen. Mit dem Folgenden würden Sie jedes h1 mit der "blauen" CSS-Klasse innerhalb eines Dokuments finden.

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.stackoverflow.com')) 
doc.xpath('//h1/a[@class="blue"]').each do |link| 
    puts link.content 
end 

Nach, wenn das, was man in der Tat zu tun versuchten, wurde die aktuelle Seite dom zu analysieren, Sie einen Blick auf JavaScript und JQuery nehmen sollte. Schienen können das nicht tun.

+0

Dies war meine ursprüngliche Herangehensweise, aber wenn Sie diese Papierzusammenfassung durchlesen, fragt er nicht nach einer css-Klasse "blau", sondern tatsächlich nach etwas, das die Farbe blau über mehrere Sites mit möglicherweise völlig unterschiedlichen CSS- und Markup-Schemata hat. –