Quel est le meilleur moyen d’analyser une page Web en Ruby?
-
02-07-2019 - |
Question
Je me suis intéressé aux bibliothèques XML et HTML de rubyforge pour trouver un moyen simple d'extraire des données d'une page Web. Par exemple, si je souhaite 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 utilisateur pour mon score de réputation actuel et ma liste de badges. J'ai essayé de convertir le code source extrait de ma page utilisateur en XML, mais la conversion a échoué en raison d'un div manquant. Je sais que je pourrais comparer les chaînes et trouver le texte que je cherche, mais il doit exister un moyen bien meilleur de le faire.
Je souhaite incorporer cela dans un script simple qui extrait mes données utilisateur sur la ligne de commande et éventuellement les développer dans une application graphique.
La solution
Utilisez Nokogiri maintenant.
Autres conseils
Malheureusement, stackoverflow prétend être du XML mais ne l’est pas réellement. Hpricot peut toutefois analyser cette soupe de balises 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.
essayez hpricot , c'est bien ... génial
Je l'ai utilisé plusieurs fois pour récurer l'écran.
J'aime toujours beaucoup ce que Ilya Grigorik écrit, et il a écrit un bon message sur l'utilisation de hpricot.
J'ai également lu cet article
Je n'ai pas fait moi-même non plus, donc YMMV, mais cela semble assez utile.
Ce que j’ai rencontré en essayant de faire cela auparavant, c’est que peu de pages Web sont des documents XML bien formés. Hpricot est peut-être capable de gérer ça (je ne l'ai pas utilisé) mais quand je faisais un projet similaire dans le passé (en utilisant Python et les fonctions d'analyse intégrées de sa bibliothèque), cela m'a aidé à avoir un pré-processeur HTML. J'ai utilisé les liaisons en python pour HTML Tidy , ce qui facilitait grandement la vie. Les liaisons Ruby sont ici mais je ne les ai pas essayées.
Bonne chance!
cela semble être un sujet ancien, mais en voici un nouveau. Exemple de 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]