抓取網頁資料在程式設計討論區中可說是常被提及的問題,在之前的「利用WSH環境的JScript抓取網頁資料」文章中,就已經試過抓取網頁資料。現在換到Rhino環境下,也用這個課題來實作一下。
在WSH環境下,採用的是Microsoft.XMLHttp物件抓取網頁資料;轉換到Rhino環境下,當然沒有這樣的物件。只是Rhino可以應用Java的物件,所以要達到抓取網頁的功能當然也可以透過呼叫Java的物件來完成。不過殺雞焉用牛刀,Rhino環境即提供函數readUrl()可以抓取網頁資料,已足夠用來抓取一般的網頁資料。
底下程式碼就是使用函數readUrl()抓取樂透彩網站的開獎號碼網頁資料:
/** * * 使用Rhino的readUrl()函數取得網頁資料。 * * @author ace * * @version 2011/10/31 v0.1 * * @see <a href="https://developer.mozilla.org/en/Rhino_Shell#readUrl(url_.5B.2C_characterCoding.5D)">readUrl(url [, characterCoding])</a> * * @description * */ load("js/rhino/InitialEnv.js"); try { // 威力彩(http://www.taiwanlottery.com.tw/Lotto/SuperLotto638/history.aspx) var strSourceURL = new String("http://www.taiwanlottery.com.tw/Lotto/SuperLotto638/history.aspx"); var strTargetFile = new String("C:\\Dev-Rhino\\SuperLotto638.html"); // 資料寫入檔案(UTF8編碼格式)。 var filTarget = new java.io.File(strTargetFile); var fisTarget = new java.io.FileOutputStream(filTarget); var BufferedWriter = new java.io.BufferedWriter(new java.io.OutputStreamWriter(fisTarget, "UTF-8")); // 使用Rhino的readUrl()函數讀取網頁內容。 var URLContent = new String(readUrl(strSourceURL, "UTF-8")); BufferedWriter.write(URLContent); } catch (e) { print("執行過程有誤,錯誤訊息:" + e.message); } finally { if (BufferedWriter != null) { BufferedWriter.flush(); BufferedWriter.close(); } }
抓取網頁資料同樣需要注意編碼格式,以免取得的網頁資料變成亂碼;函數readUrl()的第二個引數即可指定取得網頁的編碼格式,可說是相當方便的設計。
沒有留言:
張貼留言