iT邦幫忙

DAY 13
1

回應鐵人賽的文章變鐵人系列 第 13

[Reply] 以ruby來解析HTML的實用例子

swdsyu 在 淺談HTML Parsing的套件-Nokogiri 提到解析HTML的工具,
什麼時候需要用到解析HTML的時候呢?
最常的情況是,
當想要抓的資料,沒有資料庫或API的界面提供時,
卻只能從網頁上抓取資料的時候,
解析HTML或說解析DOM的工具是能夠事半功倍。
在此以Ruby的Hpricot為例,
因此套件處理中文沒有亂碼的問題。

有關書方面的資訊,
amazon的API是相當programming friendly的設計,
而讓其他程式設計者,用此界面能讀取相關資料來運用。
反觀看國內的博客來,有蠻完整的書籍相關資訊,
但似乎沒有對外公開的API,
像amazon般地供人使用,
就只好利用解析 HTML 的工具來獲取指定書籍的相關資料。

程式碼有點長,
貼在我的 gist 裡。
把該 script 命名為 book.rb

$ irb -rbook
>> b=BookItem.new('0010435538')
=> ...
>> puts b.title
血色童話 Lat den ratte komma in (Let the Right One In)
=> nil
>> puts b.author
約翰.傑維德.倫德維斯特
=> nil
>> puts b.image
<img src="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/8/0010435538.jpg&width=200&height=280&quality=80" id="main_img" height="280" alt="血色童話" width="200" />
=> nil

從這樣的方式來對到想要的欄位的值為何,
甚至也把書的封面圖的位置及簡介也找出來,
利用這樣所獲的中文書訊,
就可以建立自己想要的相關應用網站。

程式裡其實用到HTML的解析出相關的資料,
再配合regular expression的語法,
才能精確把值抓出來。

當然,該網站有時候做變動的時候,
這個類別可能就會有問題,
就需要仔細看該站的網頁,
再修改這個類別裡的語法。

這是該網站沒有API,又得抓取資料的解決方式。
系列文章


上一篇
[Reply] 海量檔案數在現有的檔案系統可能的問題(三)
下一篇
[Reply] Linux中的sudoers檔案設定簡介
系列文
回應鐵人賽的文章變鐵人30

尚未有邦友留言

立即登入留言