Каков наилучший способ анализа веб-страницы в Ruby?

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

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

Я хочу включить это в простой сценарий, который выплескивает мои пользовательские данные в командной строке и, возможно, расширяет его в графическом приложении.

Hpricot закончен!

Теперь используйте Нокогири .

К сожалению, 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 , его хорошо … удивительный

Я использовал его несколько раз для очистки экрана.

Мне всегда очень нравится то, что пишет Илья Григорик, и он написал хороший пост об использовании hpricot.

Я также прочитал этот пост некоторое время назад, и похоже, что это было бы полезно для вас.

Не делал ни сам, ни YMMV, но они кажутся очень полезными.

Что-то, с чем я столкнулся в попытке сделать это раньше, – это то, что несколько веб-страниц представляют собой хорошо сформированные XML-документы. Hpricot может справиться с этим (я его не использовал), но когда я делал аналогичный проект в прошлом (используя Python и его библиотеки, встроенные в функции синтаксического анализа), он помог получить предварительный процессор для очистки HTML. Я использовал привязки python для HTML Tidy как это, и это сделало жизнь намного проще. Рубиновые привязки здесь, но я их не пробовал.

Удачи!

это старая тема, но здесь новая. Пример получения репутации:

 #!/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]