/* syntax highlight */ /* end of syntax highlight */

2010年12月27日 星期一

iphone app 開發 (三十一) html parser 抓網頁資料

Bookmark and Share

螢幕快照 2010-12-27 下午3.58.26

 

我們有時候會從網路上拿一些 html 的資訊,一般稱叫做 crawler ,會自動從網路上爬資料下來,不用

自己產生相關的內容,這一篇文章就是做 crawler 的基礎

 

image

這次的任務是要拿到 html 裡面某個 metatag 的內容

我們目標抓取的內容是 中央氣象局英文版 (因為中文還要再做其他處理)

裡面的 <title>夾住的資料並顯示在 App 上面

<title>Central Weather Bureau Web Site</title>

 

本教學共分為三大步驟,分別是

 

第一步驟:安裝 libxml2

第二步驟: 安裝第三方 library hpple

第三步驟:設計 View 與 Controller

 

 

第一步驟:安裝 libxml2

ibxml 是一個作為解析XML文檔的函數庫。它是用C語言寫的

請先開啟一個專案, 我是選擇 View-based Appication

螢幕快照 2010-12-27 下午2.09.35

 

再來進入 Project Setting, 你可以直接按 Groups & Files 的 Xcode icon ,也可以從 menu 進入

螢幕快照 2010-12-27 下午2.10.22

 

請進入  Build tab 然後在 search 框尋找 header search path

螢幕快照 2010-12-27 下午2.31.45

 

再來看到以下畫面後按下 + 增加 libxml 進入我們的 project 當中,再按下 okay 就會看到下面那張圖

"${SDKROOT}/usr/include/libxml2 記得勾選 Recursive

螢幕快照 2010-12-27 下午2.32.39

螢幕快照 2010-12-27 下午2.32.47

 

接下來要設定另一個參數,搜尋 Other Linker Flags

螢幕快照 2010-12-27 下午2.33.17

 

一樣增加 Flag 並輸入 –lxml2 為參數後按下 ok

螢幕快照 2010-12-27 下午2.33.38

螢幕快照 2010-12-27 下午2.34.12

 

如此一來就完成我們對於 xml 部份的配置

 

 

第二步驟:安裝第三方 library Hpple

hpple 是一個 XML/HTML parser for Objective-C

我們可以直接取用這個 library 來加速我們程式的開發,直接取用 html 內容

請先到 這裡 去把 library 抓下來

 

image

 

資料夾解開後會有很多檔案,請把裡面的幾個重要檔案抓出來

TFHpple.h , TFHpple.m , TFHppleElement.h , TFHppleElement.m , XPathQuery.h , XPathQuery.m

螢幕快照 2010-12-27 下午2.35.02

 

並加入我們的專案當中

螢幕快照 2010-12-27 下午3.00.10

 

如此一來就把 hpple 加入我們的專案當中了

 

 

第三步驟:設計 View 與 Controller

程式部份不長,首先請打開 .h 標頭檔,並加入以下 code

 

  1. // .h 檔
  2. #import <UIKit/UIKit.h>
  3. #import "TFHpple.h"  
  4.  
  5. @interface htmlparserViewController : UIViewController {
  6.     IBOutlet UILabel *mLabel;   }  
  7. @end
   

  1. // .m 檔
  2. - (void)viewDidLoad {
  3.     [super viewDidLoad];   NSError* error;
  4.     NSData *htmlData = [[NSString stringWithContentsOfURL:[NSURL          
  5.        URLWithString: @"http://www.cwb.gov.tw/eng/index.htm"]             
  6.        encoding:NSASCIIStringEncoding error:&error]             
  7.        dataUsingEncoding:NSUTF8StringEncoding];  
  8.     TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];   
  9.     NSArray *elements  = [xpathParser search:@"//title"]; // get the title
  10.     TFHppleElement *element = [elements objectAtIndex:0];
  11.     NSString *h1Tag = [element content];   NSLog(@"result = %@",h1Tag);
  12.     mLabel.text = h1Tag;
  13. }

 

接下來設計 UI , 請打開 xib 檔

先加入兩個 Label , 第一個 label 沒有互動,我們先輸入 “得到的資料為”

第二個 Label 放上去後請先調整大小,再來從 File’s Owner 按下 Control 拉線至該 label ,選擇 mLabel

螢幕快照 2010-12-27 下午2.51.31

 

如果一切都沒有問題,就可以測看看有沒有成功摟! 模擬器可以抓到該網站的 title 並顯示在 App 當中但是我如果是在 Device 上面做模擬,如果 iPhone 沒有開網路的話,就會發生問題,所以如果上傳到手機上面做測試的話請記得開啟你的網路喔。

 

螢幕快照 2010-12-27 下午3.58.26

 

恭喜你成功從網路上抓到資料。

 

 

參考資料

libxml2

https://github.com/topfunky/hpple

http://www.dimzzy.com/blog/2009/10/hyperparser-tolerant-html-parser/

http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone

0 意見:

張貼留言

Related Posts Plugin for WordPress, Blogger...