2008-09-26 4 views
14

Ich habe XML-und HTML-Bibliotheken auf RubyForge für eine einfache Möglichkeit, um Daten aus einer Webseite zu ziehen. Zum Beispiel, wenn ich eine Benutzerseite auf Stackoverflow parsen möchte, wie kann ich die Daten in ein verwendbares Format bringen?Was ist der beste Weg, um eine Webseite in Ruby zu parsen?

Angenommen, ich möchte meine eigene Benutzerseite für meine aktuelle Reputations- und Badge-Liste parsen. Ich habe versucht, die von meiner Benutzerseite abgerufene Quelle in xml zu konvertieren, aber die Konvertierung ist aufgrund eines fehlenden div fehlgeschlagen. Ich weiß, dass ich einen String vergleichen und den gesuchten Text finden kann, aber es muss einen viel besseren Weg geben, dies zu tun.

Ich möchte dies in ein einfaches Skript integrieren, das meine Benutzerdaten in der Befehlszeile ausspuckt und möglicherweise in eine GUI-Anwendung erweitert.

+0

Nicht auf Ihrer Parade zu regnen, aber die besten http: //modos.org/sof/? U = ??? (wo ??? ist Ihre ID, für Sie ist es 22423) kann schon tun, was Sie wollen. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/61553/track-your-reputation – SCdF

Antwort

5

versuchen hpricot, seine gut ... awesome

ich es mehrmals für Screen Scraping verwendet haben.

18

Leider behauptet Stackoverflow XML zu sein, ist es aber nicht. Hpricot kann jedoch diese Tag-Suppe in einen Baum von Elementen für Sie parsen.

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 

Und so weiter.

0

Ich mag immer, was Ilya Grigorik schreibt, und er wrote up a nice post über die Verwendung von hpricot.

Ich auch read this post eine Weile zurück und es sieht aus wie es für Sie nützlich wäre.

Habe ich selbst nicht gemacht, also YMMV aber diese scheinen ziemlich nützlich.

0

Etwas, das ich versuchte, dies zu tun, ist, dass einige Webseiten wohlgeformte XML-Dokumente sind. Hpricot ist vielleicht in der Lage, damit umzugehen (ich habe es nicht benutzt), aber als ich in der Vergangenheit ein ähnliches Projekt durchführte (mit Python und seinen eingebauten Parsing-Funktionen), half es, einen Pre-Prozessor zur Verfügung zu haben, um das zu bereinigen HTML. Ich benutzte die Pythonbindungen für HTML Tidy als dies und es machte das Leben viel einfacher. Ruby Bindungen sind here, aber ich habe sie nicht ausprobiert.

Viel Glück!

0

es scheint ein altes Thema zu sein, aber hier ist ein neues Thema. Beispiel bekommen Ruf:

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