2009-10-23 1 views
5

Come indicato dal titolo, ho alcune attività di manipolazione DOM. Ad esempio, desidero: - trovare tutti gli elementi H1 con colore blu. - trova tutto il testo che ha la dimensione 12px. - ecc.Come manipolare DOM con Ruby on Rails

Come posso farlo con Rails?

grazie .. :)

Aggiornamento

Ho fatto qualche ricerca sull'estrazione di contenuto della pagina web in base a questo carta->http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

La sintesi del passo è:

  1. ottenere l'URL Web che voglio estrarre (pagina web singola)
  2. afferrare alcuni elementi dalla pagina web sulla base di alcune regole visive (Es: afferrare tutte H1 che hanno colore blu)
  3. processo gli elementi con il mio algoritmo
  4. salvare il risultato nel mio database.

-Mi dispiace per il mio cattivo english-

+0

La prego di espandere su ciò che si sta cercando di ottenere (quello che state facendo) in modo che posso offrire consigli più specifici per il vostro problema? Grazie. –

+0

In base all'aggiornamento, ti consigliamo di cambiare la tua domanda con qualcosa del tipo: "Come analizzare un documento HTML basato su criteri visivi con Ruby" –

risposta

1

Per risolvere in modo affidabile che colore un elemento arbitrario su una pagina web è, si avrebbe bisogno di reverse engineering di un browser (per prendere accuratamente in considerazione i fogli di stile, hack di markup, tag, immagini, ecc.).

Un approccio molto più semplice sarebbe quello di incorporare un browser esistente come gecko in un'applicazione personalizzata di produzione.

Come lo spider avrebbe sfogliato le pagine, le avrebbe passate all'istanza di gecko incorporata in cui era possibile utilizzare getComputedStyle per individuare il colore di un singolo elemento.

Originariamente menzionato per voler utilizzare Ruby on Rails per questo progetto, Rails è un framework per la scrittura di applicazioni di presentazione e davvero inadatto per un progetto come questo.

Come punto di partenza, ti consiglio di controllare RubyGnome, in particolare la funzionalità Gtk::MozEmbed di RubyGnome.

+0

Grazie, Mike. Funziona anche con la proprietà css? Ad esempio: desidero selezionare solo H1 con colore blu. – andrisetiawan

+0

Questo non è ciò che l'OP vuole. Vuole eseguire tutta l'elaborazione sul lato server, non in JavaScript. –

+0

Ho pubblicato la mia risposta prima del suo aggiornamento (quando sembrava che volesse una soluzione lato client). –

8

Se quello che stai cercando di fare è manipolare documenti HTML all'interno di un'applicazione di rotaie, dovresti dare un'occhiata a Nokogiri.

Usa XPath per cercare nel documento. Con quanto segue, si troverà qualsiasi h1 con la classe css "blu" all'interno di un documento.

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 

Dopo, se quello che si stava tentando di fare è stato infatti analizzare il DOM della pagina corrente, si dovrebbe dare un'occhiata a Javascript e JQuery. Le rotaie non possono farlo.

+0

Anche questo era il mio approccio originale, ma se leggi la sinossi di questo articolo, non sta chiedendo una classe css "blu", ma in realtà qualcosa di blu in più siti con schemi CSS e di markup potenzialmente molto diversi. –