2009-10-23 10 views
5

Jak powiedział tytuł, mam pewne zadania manipulacji DOM. Na przykład chcę: - znaleźć wszystkie elementy H1, które mają niebieski kolor. - znajdź cały tekst o rozmiarze 12 pikseli. - itd ..Jak manipulować DOM z Ruby na szynach

Jak mogę to zrobić z Rails?

Dziękuję .. :)

Aktualizacja

Robiłem rozeznanie dotyczące wyodrębniania zawartości strony internetowej w oparciu o ten papierniczym>http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

Podsumowanie etapu jest:

  1. pobierz adres internetowy, który chcę pobrać (pojedyncza strona internetowa)
  2. chwycić pewne elementy strony internetowej opartej na regułach wizualnych (Ex: chwycić wszystkie H1, które mają barwę niebieską)
  3. przetwarzać elementy z mojego algorytmu
  4. zapisać wynik do mojej bazy danych.

-Przepraszam za moje złe angielski-

+0

mógłbyś rozwinąć na co staramy się osiągnąć (co robisz), dzięki czemu mogę zaoferować bardziej konkretne porady dla swojego problemu? Dzięki. –

+0

W oparciu o zaktualizowane, zalecam zmianę pytania na "Jak przeanalizować dokument HTML na podstawie kryteriów wizualnych za pomocą Rubiego" –

Odpowiedz

1

wiarygodnie uporządkować jaki kolor dowolny element na stronie to, czego potrzeba do inżynierii wstecznej przeglądarkę (dokładnie wziąć pod uwagę, hacki stylów znaczników, uszkodzone tagi, obrazy itp.).

Dużo łatwiejszym rozwiązaniem byłoby osadzenie istniejącej przeglądarki, takiej jak gecko, w niestandardowej aplikacji do tworzenia.

Gdy pająk przeglądał strony, przekazywał je do osadzonej instancji gecko, gdzie można było użyć koloru, który jest pojedynczym elementem.

Po raz pierwszy wspomniałeś o potrzebie użycia Ruby on Rails dla tego projektu, Rails to framework do pisania aplikacji prezentacyjnych i naprawdę źle nadaje się do takiego projektu.

Jako punkt wyjścia, polecam sprawdzić RubyGnome, a zwłaszcza funkcję RubyGnome w Gtk::MozEmbed.

+0

Dzięki, Mike. Czy działa również z własnością css? Na przykład: Chcę wybrać tylko H1, które mają niebieski kolor. – andrisetiawan

+0

Tego nie chce OP. On chce wykonać całe przetwarzanie po stronie serwera, a nie JavaScript. –

+0

Przekazałem swoją odpowiedź przed jego aktualizacją (kiedy wydawało się, że chce rozwiązania po stronie klienta). –

8

Jeśli próbujesz manipulować dokumentami HTML wewnątrz aplikacji szyny, powinieneś spojrzeć na Nokogiri.

Używa XPath do przeszukiwania dokumentu. Poniżej znajduje się h1 z "niebieskim" klasą css wewnątrz dokumentu.

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 

Po, jeśli to, co staraliśmy się zrobić, to rzeczywiście analizowania bieżącej strony DOM, należy spojrzeć na JavaScript i jQuery. Szyny nie mogą tego zrobić.

+0

To również było moje oryginalne podejście, ale jeśli czytasz streszczenie tego artykułu, nie pyta o klasę css "blue", ale w rzeczywistości coś niebieskiego w wielu witrynach z potencjalnie szalenie różnymi schematami CSS i znaczników. –

Powiązane problemy