使用 scrubyt 爬網頁

, , at June 1st, 2009 by 小影

看見 FindbookMoosh (和類似的網站) 會覺得很高興,它們除了把各個商戶的網站資料結合之外,還有更快更好用的介面。究竟怎樣才能把不同的網站資料到手呢?其實也不一定很困難,比如使用今天介紹的 Ruby Library scrubyt

首先我們設定今日的目標:找出某一場電影的座位表現在的狀態。

要達到這目標你需要準備 Firebug (用來尋找 XPath) 和 Ruby。

首先安裝 scrubyt,在 command line 輸入以下指令:

gem install scrubyt

接著建立一個新檔案 show.rb:

執行這段程式碼,就會輸出以下資料:

哈,我想你大概已明白 scrubyt 怎樣使用了?

1. Scrubyt::Extractor.define 開始定義了一個 Extractor, extractor 是 scrubyt 用來分析網頁的程式。

2. fetch 命令叫 scrubyt 打開指定的網頁,你可以試著在 browser 打開這頁看看座位表是怎樣的樣子 (URL 裡的 id 過幾天可能會過時了… 請自行找適當的一頁)

3. 接著的就是魔法:在 scrubyt 裡只要沒有被定義的關鍵字都會自動變成一個 node 的 definition。也就是說 extractor 會試著依我們指定的 XPath 去建立一個叫 schedule 的 node。”//table[2]” 是個 Xpath 的 expression ,scrubyt 會找出這個 expression 並在裡面繼續找 cinema, house … 等資料

4. 最後一句是把資料轉成 XML再把 big 5 轉成 utf-8 。

以上還沒有座位資料,要加也不是太難…

5. 這是利用 firebug 分析網頁後,發現未售的座位都是 seat_A 的 class ,因此只要找 seat_A 就可找到未售座位了。

最後我們想要得出一個數字:有多少未售的座位?這裡我使用 Nokogiri ,一個 Ruby 的 XML Library :

在得出原本的 XML 後,我們計算一下 seatplan 下有多少個 seat 的 node ,這就是可售座位的數目了,把這加入原本的 XML 下,再把無用的 seatplan 移除,結果如下:

不錯,對不?你也許會說這只是找到一場電影的資料罷了… 但用這思維要找今天有甚麼電影也不難,以下是我的 schedule.rb:

執行的結果:

Scrubyt 是個很神奇 (雖然很實驗性) 的程式庫,只要運用得宜可以用很簡短簡潔的方法把任何網頁變成可用的 XML !它還有很多神奇的功能,但這要留給大家到它的 wiki 慢慢研究了。

相關文章

Post a Comment