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

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

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

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

Не дождик на ваш парад а самый отличный modos.org/sof/?u= ??? (где ??? - ваш id, для вас это 22423) может уже делать то, что вы хотите. Подробнее см. stackoverflow.com/questions/61553/track-your-reputation.

SCdF 26.09.2008 09:05
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
14
1
9 528
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

попробуйте трикотаж, это хорошо ... круто

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

К сожалению, 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]
Ответ принят как подходящий

Hpricot закончился!

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

Другие вопросы по теме