iT邦幫忙

17

在Ruby上,可以用近似 jQuery語法來解析DOM的好工具 -Hpricot

前陣子有一個需求,要從5、60個網頁檔中,抓出需要的資訊。

我稍稍看了一下這些網頁檔原始碼,結構大概是大同小異,而且需要的資料,都有使用id來標示,因此我想於其直接去parse文字,不如透過DOM來抓會更簡單。

雖然我最熟的語言該算是JavaScript,但是由於這些網頁都已經另存成檔案,而且parsing完成的資料又要寫入到文字檔中,所以我就想Ruby來做這個工作。

Ruby是一個很有趣的語言,雖然我的程式開發經驗相當少,但是接觸過Ruby之後,還是被他魔幻般的語法和自由度給吸引住。當初是想玩玩Rails才摸Ruby,沒想到Rails沒繼續玩下去,但是Ruby卻一直吸引著我。

前陣子還直接用Ruby+Active Record+Sqlite寫了一個命令列底下的小應用程式,蠻好玩的。

言歸正傳,雖然喜歡Ruby,但是畢竟應用時間短,也不知道怎麼運用它來parsing DOM,這時就想到iT邦上的Ruby達人CFC,果然MSN給他之後,得到一個漂亮的答案。


Hpricot
Hpricot是基於Tanaka Akira(田中明?)的HTree和John Resig的JQuery選取語法而來的HTML parser,因此可以用XQuery語法和CSS的選取語法來取得DOM元素。

要安裝Hpricot的話,只要用Ruby的gem即可。

gem install Hpricot

安裝好之後,在程式檔的開頭先引用進來

require 'rubygems'
require 'hpricot'

這樣就可以開始使用Hpricot了。

舉一個最簡單的例子,假設我要開啟的文件檔名是位於project資料夾中的1.html,然後要parsing的資料有個id叫bookTItle,透過下面兩行就解決了。

doc = open("project/1.html")

result = doc.at('#bookTitle').innerText()

此外,我也可以操作DOM,例如更改某個<span>的class。

(doc/"span.newCopy").set("class", "hotSale")

另外如果你熟XQuery的語法,在抓特定dom上也很好用。

幾個相關的link供大家參考。

官方網站
Hpricot 引導文件
Hpricot API
ihower寫的介紹(中文)(比這裡寫的專業多了 :p)


0
jjw
iT邦研究生 1 級 ‧ 2008-07-11 00:09:12

謝謝分享

0
kuochiahao
iT邦研究生 1 級 ‧ 2008-07-11 09:20:53

謝謝分享

0
jerry640
iT邦新手 1 級 ‧ 2008-07-12 08:16:50

你也是達人

0
gkkangel
iT邦好手 1 級 ‧ 2009-04-01 09:00:46

謝謝分享

我要留言

立即登入留言