2008-09-26 8 views
14

J'ai regardé les bibliothèques XML et HTML sur rubyforge pour un moyen simple d'extraire des données d'une page Web. Par exemple, si je veux analyser une page utilisateur sur stackoverflow, comment puis-je obtenir les données dans un format utilisable? Dites que je veux analyser ma propre page d'utilisateur pour mon score de réputation actuel et la liste des badges. J'ai essayé de convertir la source récupérée de ma page d'utilisateur en xml mais la conversion a échoué en raison d'un div manquant. Je sais que je pourrais faire une comparaison de chaînes et trouver le texte que je cherche, mais il doit y avoir une bien meilleure façon de le faire.Quelle est la meilleure façon d'analyser une page Web dans Ruby?

Je veux l'incorporer dans un script simple qui crache mes données d'utilisateur à la ligne de commande, et peut-être développer dans une application graphique.

+0

Ne pas pleuvoir sur votre défilé mais le plus excellent http: //modos.org/sof/? U = ??? (où ??? est votre identifiant, pour vous c'est 22423) peut déjà faire ce que vous voulez. Voir http://stackoverflow.com/questions/61553/track-your-reputation pour plus de détails – SCdF

Répondre

5

essayer hpricot, son bien ... génial

Je l'ai utilisé plusieurs fois pour racler l'écran.

18

Malheureusement stackoverflow prétend être XML mais ne l'est pas. Hpricot cependant peut analyser cette soupe tag dans un arbre d'éléments pour vous.

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 

Et ainsi de suite.

0

J'aime toujours vraiment ce que Ilya Grigorik écrit, et il wrote up a nice post sur l'utilisation de hpricot.

J'ai également read this post il y a un certain temps et il semble que ce serait utile pour vous. Je n'ai pas fait moi-même, donc YMMV mais ceux-ci me semblent plutôt utiles.

0

Quelque chose que j'ai rencontré en essayant de faire cela auparavant est que quelques pages Web sont des documents XML bien formés. Hpricot peut être capable de faire face à cela (je ne l'ai pas utilisé) mais quand je faisais un projet similaire dans le passé (en utilisant Python et les fonctions d'analyse syntaxique de sa bibliothèque), il a aidé à avoir un pré-processeur pour nettoyer HTML J'ai utilisé les fixations python pour HTML Tidy comme ceci et cela m'a simplifié la vie. Les reliures Ruby sont here mais je ne les ai pas essayées.

Bonne chance!

0

il semble être un vieux sujet mais voici un nouveau. Exemple d'obtenir la réputation:

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