Я искал библиотеки XML и HTML на rubyforge в поисках простого способа извлечения данных с веб-страницы. Например, если я хочу проанализировать пользовательскую страницу в stackoverflow, как мне получить данные в пригодном для использования формате?
Скажем, я хочу проанализировать свою страницу пользователя на предмет моего текущего рейтинга репутации и списка значков. Я попытался преобразовать исходный код, полученный с моей пользовательской страницы, в xml, но преобразование не удалось из-за отсутствия div. Я знаю, что могу сравнить строки и найти искомый текст, но должен быть способ сделать это лучше.
Я хочу включить это в простой сценарий, который выводит мои пользовательские данные в командной строке и, возможно, расширяет его в приложение с графическим интерфейсом.






попробуйте трикотаж, это хорошо ... круто
Я использовал его несколько раз для очистки экрана.
К сожалению, stackoverflow утверждает, что это XML, но на самом деле это не так. Однако Hpricot может преобразовать этот суп тегов в дерево элементов за вас.
require 'hpricot'
require 'open-uri'
doc = Hpricot(open("http://stackoverflow.com/users/19990/armin-ronacher"))
reputation = (doc / "td.summaryinfo div.summarycount").text.gsub(/[^\d]+/, "").to_i
И так далее.
Мне всегда очень нравится то, что пишет Илья Григорик и он написал хороший пост об использовании hpricot.
Я также прочтите этот пост некоторое время назад, и похоже, что это будет полезно для вас.
Сам я тоже не делал, так что YMMV, но они кажутся довольно полезными.
Что-то, с чем я сталкивался, пытаясь сделать это раньше, - это то, что некоторые веб-страницы представляют собой правильно сформированные XML-документы. Hpricot, возможно, сможет справиться с этим (я не использовал его), но когда я делал аналогичный проект в прошлом (используя Python и встроенные в его библиотеку функции синтаксического анализа), это помогло иметь препроцессор для очистки HTML. Я использовал привязки python для HTML Tidy, так как это сделало жизнь намного проще. Привязки Ruby - это здесь, но я их не пробовал.
Удачи!
Вроде бы старая тема, но вот новая. Пример получения репутации:
#!/usr/bin/env ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
user = "619673/100kg"
html = "http://stackoverflow.com/users/%s?tab=reputation"
page = html % user
puts page
doc = Hpricot(open(page))
pars = Array.new
doc.search("div[@class='subheader user-full-tab-header']/h1/span[@class='count']").text.each do |p|
pars << p
end
puts "reputation " + pars[0]
Используйте Нокогири сейчас.
Не дождик на ваш парад а самый отличный modos.org/sof/?u= ??? (где ??? - ваш id, для вас это 22423) может уже делать то, что вы хотите. Подробнее см. stackoverflow.com/questions/61553/track-your-reputation.