Как манипулировать DOM с помощью Ruby on Rails - PullRequest
6 голосов
/ 23 октября 2009

Как сказано в названии, у меня есть несколько задач по манипулированию DOM. Например, я хочу: - найти все элементы H1, которые имеют синий цвет. найти весь текст размером 12px. - и т. д.

Как мне это сделать с помощью Rails?

Спасибо ..:)

Обновление

Я проводил некоторые исследования по извлечению контента веб-страницы на основе этого документа -> http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

Краткое описание шага:

  1. получить URL-адрес, который я хочу извлечь (одна веб-страница)
  2. получить некоторые элементы с веб-страницы на основе некоторых правил визуального оформления (например: получить все H1, которые имеют синий цвет )
  3. обработать элементы по моему алгоритму
  4. сохранить результат в моей базе данных.

- извините за мой плохой английский -

Ответы [ 3 ]

9 голосов
/ 23 октября 2009

Если вы пытаетесь манипулировать HTML-документами внутри приложения rails, вам следует взглянуть на Nokogiri .

Используется XPath для поиска по документу. С помощью следующего вы найдете любой h1 с «синим» классом css внутри документа.

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

После того, если вы действительно пытались проанализировать текущую страницу, вам следует взглянуть на JavaScript и JQuery. Rails не может этого сделать.

2 голосов
/ 02 января 2010
1 голос
/ 23 октября 2009

Чтобы надежно определить, какого цвета произвольный элемент на веб-странице, вам нужно будет перепроектировать браузер (чтобы точно учитывать таблицы стилей, хаки разметки, битые теги, изображения и т. Д.).

Намного проще было бы встроить существующий браузер, такой как gecko , в пользовательское приложение вашего проекта.

Поскольку ваш паук просматривал страницы, он передавал их вашему встроенному экземпляру gecko, где вы могли бы использовать getComputedStyle , чтобы узнать, какого цвета будет отдельный элемент.

Вы изначально упоминали, что хотите использовать Ruby on Rails для этого проекта, Rails - это фреймворк для написания презентационных приложений и действительно плохо подходит для такого проекта.

В качестве отправной точки я бы порекомендовал вам проверить RubyGnome и, в частности, функциональность Gtk :: MozEmbed RubyGnome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...