2008-09-26 8 views
14

मैं वेब पेज से डेटा खींचने के लिए एक आसान तरीका के लिए rubyforge पर एक्सएमएल और एचटीएमएल पुस्तकालयों को देख रहा हूं। उदाहरण के लिए यदि मैं स्टैक ओवरफ्लो पर किसी उपयोगकर्ता पेज को पार्स करना चाहता हूं तो मैं डेटा को एक प्रयोग योग्य प्रारूप में कैसे प्राप्त कर सकता हूं?रूबी में एक वेब पेज का विश्लेषण करने का सबसे अच्छा तरीका क्या है?

मैं अपने वर्तमान प्रतिष्ठा स्कोर और बिल्ला लिस्टिंग के लिए अपने खुद के उपयोगकर्ता पेज पार्स करने के लिए चाहते हैं। मैंने अपने उपयोगकर्ता पेज से एक्सएमएल में पुनर्प्राप्त स्रोत को बदलने की कोशिश की लेकिन गायब div के कारण रूपांतरण विफल रहा। मुझे पता है कि मैं स्ट्रिंग की तुलना कर सकता हूं और जिस पाठ को मैं ढूंढ रहा हूं उसे ढूंढ सकता हूं, लेकिन ऐसा करने का एक बेहतर तरीका होना चाहिए।

मैं एक सरल स्क्रिप्ट आदेश पंक्ति पर मेरे उपयोगकर्ता डेटा बाहर थूक में इसे शामिल कर, और संभवतः एक जीयूआई आवेदन में यह विस्तार करना चाहते।

+0

अपने परेड पर बारिश नहीं है लेकिन सबसे उत्कृष्ट http: //modos.org/sof/? U = ??? (जहां ??? आपकी आईडी है, आपके लिए यह 22423 है) जो भी आप चाहते हैं वह पहले से ही कर सकता है। अधिक जानकारी के लिए http://stackoverflow.com/questions/61553/track-your-reputation देखें – SCdF

उत्तर

5

इसकी अच्छी तरह से hpricot कोशिश, ... भयानक

मैं स्क्रीन scraping के लिए इसे कई बार उपयोग किया है।

18

दुर्भाग्य stackoverflow एक्सएमएल होने का दावा कर रहा है, लेकिन वास्तव में नहीं है। 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 

और आगे।

0

मैं हमेशा वास्तव में क्या इल्या ग्रिगोरिक लिखते हैं की तरह है, और वह Hpricot उपयोग के बारे में wrote up a nice post

मैं भी read this post एक समय पहले और ऐसा लगता है कि यह आप के लिए उपयोगी होगा।

या तो किया है नहीं अपने आप को, तो YMMV लेकिन इन सुंदर उपयोगी लग रहे हैं।

0

कुछ ऐसा करने से पहले मैं ऐसा करने की कोशिश कर रहा हूं कि कुछ वेब पेज अच्छी तरह से बनाए गए XML दस्तावेज़ हैं। Hpricot उस से निपटने में सक्षम हो सकता है (मैंने इसका उपयोग नहीं किया है) लेकिन जब मैं अतीत में एक समान प्रोजेक्ट कर रहा था (पाइथन और इसकी लाइब्रेरी के पार्सिंग फ़ंक्शंस में निर्मित) का उपयोग करके इसे प्री-प्रोसेसर को साफ करने में मदद मिली एचटीएमएल। मैंने HTML Tidy के लिए पाइथन बाइंडिंग का उपयोग किया और इसने जीवन को बहुत आसान बना दिया। रूबी बाइंडिंग here हैं लेकिन मैंने उन्हें आजमाया नहीं है।

गुड लक!

0

ऐसा लगता है कि यह एक पुराना विषय है लेकिन यहां एक नया है। उदाहरण के लिए हो रही प्रतिष्ठा:

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