2008-09-26 124 views
14

我一直在尋找rubyforge上的XML和HTML庫,以便將數據從網頁中提取出來。例如,如果我想解析一個用戶頁面上的stackoverflow我怎樣才能將數據轉換爲可用的格式?在Ruby中解析網頁的最佳方式是什麼?

假設我想解析我自己的用戶頁面以獲取當前的聲望得分和徽章列表。我試圖將從我的用戶頁面檢索到的源代碼轉換爲xml,但由於缺少div,轉換失敗。我知道我可以做一個字符串比較,並找到我正在尋找的文本,但必須有一個更好的方法來做到這一點。

我想將它合併到一個簡單的腳本中,該腳本在命令行處吐出我的用戶數據,並可能將其擴展到GUI應用程序中。

+0

不要在你的遊行上下雨,但最優秀的http://modos.org/sof/?u = ??? (其中???是你的id,對你來說是22423)可能已經做了你想要的。有關更多詳細信息,請參閱http://stackoverflow.com/questions/61553/track-your-reputation – SCdF 2008-09-26 05:05:43

回答

5

嘗試hpricot,其良好...真棒

我已經使用了好幾次的屏幕抓取。

18

不幸的是,stackoverflow聲稱是XML但實際上不是。 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

我總是很喜歡Ilya Grigorik寫的東西,以及他使用hpricot的wrote up a nice post

我也read this post一會兒回來,它看起來會對你有用。

我自己也沒有做過,所以YMMV,但這些似乎很有用。

0

我之前遇到的一些問題是,很少有網頁是格式良好的XML文檔。 Hpricot可能能夠處理(我沒有使用它),但是當我過去做了一個類似的項目時(使用Python及其內置的解析函數),它有助於使用預處理器來清理HTML。因爲這個,我使用了python綁定爲HTML Tidy,它使生活變得更容易。 Ruby綁定是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] 
相關問題