[Android]透過jsoup解析、抓取網頁上的資料,顯示在APP中

[

 

本篇一樣使用eclipe作為開發工具,環境安裝可參考

http://laeudora.com/iwebinfo/?p=478

在使用jsoup之前,先到jsoup官網下載提供的jar檔案 http://jsoup.org/download 下載core library檔案jsoup-1.8.1.jar(目前版本是1.8.1)即可 接下來,要讓我們的專案能夠透過jsoup來抓取網頁上的資料,需要做一些設定,可透過下面兩種方式,擇一即可

方法1.將下載的jar檔案放置到專案的的libs資料夾中,完成 方法

2. (1)對著專案名稱按右鍵,選擇properties

jsoup1

 

(2).左側選單中找到Java Build Path,選Libraries標籤頁,點擊Add Extrenal JARs,依照你電腦中jar檔放置路徑將檔案加入,只要畫面中多出你加入的檔案,如下圖所示,就表示已經加入成功,按下OK 螢幕截圖 2015-02-15 10.48.40

 

 

  • 開始之前一定要知道的

在正式寫程式之前,有兩個地方要注意。

1.Android 4.0版開始,限制開發程式人員,不能把網路連結等相關程序(如HTTP的請求,或我們本篇要用到的jsoup的一些抓取網頁資料的動作),寫在主程式中。為了避免當連結過久造成程式卡死的情形(Android中,若APP等待回應時間過久,超過五秒以上,會收到ANR(Application not Responsed)訊息,系統會強制關閉APP) 所以有關網路連結相關程式碼,我們需要寫在執行序(Thread)中或AsyncTask(非同步任務)中。若直接寫在主程式裡,當你執行程式時,程式會直接停止(我一開始練習的時候就是這樣,語法都沒問題但就是不能跑…) 你可以透過編譯器的LogCat,發現android.os.NetworkOnMainThreadException問題,表示你把網路連結的程式碼寫在主程式裡面。

2.記得要在AndroidManifest.xml檔案中,加入<uses-permission android:name=”android.permission.INTERNET” /> ,替你的APP加上使用網路的權限。

 

  • 開始撰寫程式

我們使用jsoup最簡單的範例,抓取網頁的title,當使用者按下Button時,就會去抓取網頁的title,並顯示在一個TextView元件上

原始畫面:

jsoup001

執行結果

jsoup002

 

一開始我們在activity_main.xml配置一個TextView和Button 程式碼如下

 

接下來在MainActivity.java檔案中,撰寫如下程式,程式碼會在下面做說明

下面分段來解釋

27~47行: onCreate方法。首先21行宣告了一字串url,內容是我們即將要分析的網址。另外24行的tilte字串,則是用於存放最後jsoup抓取網頁標題的結果。

30~31行:透過findViewById方法,將我們配置的TextView和Button元件抓取過來,後面會使用到。

35~45行:按鈕bttitle的點擊事件。重點在第42行的地方,我們創建了一個執行緒。(前面有提到,網路連接的部分要寫在執行緒中),利用start方法啟動這個執行緒。執行緒真正要做的內容,需透過runnable來執行,因此我們在下面會再宣告出一個runnable,將抓取網頁標題這件事寫在裡面。

49~61行:宣告一個runnable。 53行:宣告了一個Document元件,透過Jsoup.connect(url).get();  抓取了url所寫的網址的網頁內容,儲存在此Document元件中,接下來所有jsoup的抓取、分析,都透過這個Document元件來完成。

54行:透過.title()方法,抓取網頁title標籤的內容,儲存到title字串中。 除了.title()方法,也可以用像是doc.getElementBytag(“這裡放網頁標籤”); 去抓取你想分析的標籤內容。詳細語法的使用,可以參考jsoup的使用手冊http://www.open-open.com/jsoup/

59行:抓取完畢後,在runnable最後,傳送了一個empty的訊息到handler中,因執行緒無法去更動UI介面,更動介面的部分必須透過handler完成。

64~70行:宣告一個handler,負責UI界面更新。在第68行處,將TextView的內容改為我們所抓取到的網頁標題。

關於作者

By zomzad
聯繫本站: zomzad@gmail.com

TAG