2008-09-26 14 views
14

Przeglądałem biblioteki XML i HTML na rubyforge, aby w prosty sposób wyciągnąć dane ze strony internetowej. Na przykład, jeśli chcę parsować stronę użytkownika na stackoverflow, jak mogę uzyskać dane do użytecznego formatu?Jaki jest najlepszy sposób na analizowanie strony internetowej w Ruby?

Powiedz, że chcę przeanalizować własną stronę użytkownika pod kątem mojego obecnego wyniku reputacji i listy odznak. Próbowałem przekonwertować źródło pobrane z mojej strony użytkownika na xml, ale konwersja nie powiodła się z powodu braku elementu div. Wiem, że mogę porównać ciąg i znaleźć tekst, którego szukam, ale musi być o wiele lepszy sposób na zrobienie tego.

Chcę włączyć to w prosty skrypt, który wypluwa moje dane użytkownika w wierszu poleceń, i ewentualnie rozszerzyć go do aplikacji GUI.

+0

Nie pada deszcz na Twojej paradzie ale najdoskonalszy http: //modos.org/sof/? U = ??? (gdzie jest twój identyfikator, dla ciebie 22423) może już robić to, co chcesz. Zobacz http://stackoverflow.com/questions/61553/track-your-reputation, aby dowiedzieć się więcej – SCdF

Odpowiedz

5

spróbować hpricot, jego dobrze ... niesamowite

Używałem go kilka razy na skrobanie ekranu.

18

Niestety stackoverflow twierdzi, że jest XML, ale w rzeczywistości nie jest. Hpricot można jednak sparsować tę zupę tagów w drzewo elementów.

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 

I tak dalej.

0

Zawsze bardzo podoba mi się to, co pisze Ilya Grigorik, a on wrote up a nice post o używaniu hpricota.

Ja także read this post chwilę temu i wygląda na to, że byłby dla Ciebie przydatny.

Nie zrobiłem sam, więc YMMV, ale te wydają się całkiem przydatne.

0

Coś, na co próbowałem to zrobić, to fakt, że kilka stron internetowych to dobrze sformułowane dokumenty XML. Hpricot może być w stanie poradzić sobie z tym (nie użyłem go), ale kiedy robiłem podobny projekt w przeszłości (używając wbudowanych funkcji Pythona i jego bibliotek), pomógł mi mieć pre-procesor do czyszczenia HTML. Użyłem powiązań Pythona dla HTML Tidy i to ułatwiło życie. Wiązania ruby ​​są here, ale ich nie próbowałem.

Powodzenia!

0

wydaje się być starym tematem, ale tutaj jest nowy. Przykład coraz reputacji:

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