Каков наилучший способ разбора веб-страницы в Ruby? - PullRequest
14 голосов
/ 26 сентября 2008

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

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

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

Ответы [ 6 ]

18 голосов
/ 26 сентября 2008

К сожалению, 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

и пр.

5 голосов
/ 30 января 2014

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

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

5 голосов
/ 26 сентября 2008

попробуй hpricot , хорошо ... круто

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

0 голосов
/ 16 апреля 2013

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

#!/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]
0 голосов
/ 27 сентября 2008

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

Удачи!

0 голосов
/ 27 сентября 2008

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

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

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

...