Как создать схему структуры HTML-тегов на странице с помощью Nokogiri? - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь создать схему структуры тегов HTML-страницы с помощью Nokogiri, которую я могу использовать в качестве индикатора изменения содержимого HTML-страницы.

Чтобы сделать это, я хочу вырезать весь текст и оставить только HTML-теги (без атрибутов).

Идея состоит в том, чтобы использовать это как эскиз страницы, один из немногих, которые я использую, чтобы увидеть, изменилась ли страница.

Когда я закончу, я хочу, чтобы "эскиз" выглядел примерно как

<html><head></head><body><div></div><p><div></div></p></body></html>

, чтобы его можно было сравнить с ревизиями, чтобы увидеть, изменилась ли структура страницы.

Существует множество примеров того, как разобрать дом в Нокогири.Но как насчет перечисления?

Есть мысли у кого-нибудь?

1 Ответ

1 голос
/ 24 августа 2011

Примерно так:

class Nokogiri::XML::Node

  def to_sketch
    children.find_all(&:element?).map(&:to_sketch).join
  end
end

class Nokogiri::XML::Element
  def to_sketch
    "<#{name}>#{super}</#{name}>"
  end
end

РЕДАКТИРОВАТЬ Пример

require 'nokogiri'
require 'open-uri'
Nokogiri::HTML(open('http://google.com')).to_sketch

Возвращает:

"<html><head><meta></meta><title></title><script></script><style></style><script></script></head><body><textarea></textarea><div><div><nobr><b></b><a></a><a></a><a></a><a></a><a></a><a></a><a><u></u></a></nobr></div><div><nobr><span></span><span></span><span><a></a></span><a></a><a></a></nobr></div><div></div><div></div></div><center><br></br><div><a><img></img></a><br></br><br></br></div><form><table><tr><td></td><td><input></input><input></input><input></input><div><input></input></div><br></br><span><span><input></input></span></span><span><span><input></input></span></span></td><td><a></a><a></a></td></tr></table></form><div><br></br><div><font><a></a><a></a><a></a></font><br></br><br></br></div></div><div></div><span><center><div><div><a></a><a></a><a></a><a></a></div></div><p><a></a></p></center></span><div></div><div><script></script></div><script></script><script></script></center></body></html>"
...