我們有時候會從網路上拿一些 html 的資訊,一般稱叫做 crawler ,會自動從網路上爬資料下來,不用
自己產生相關的內容,這一篇文章就是做 crawler 的基礎
這次的任務是要拿到 html 裡面某個 metatag 的內容
我們目標抓取的內容是 中央氣象局英文版 (因為中文還要再做其他處理)
裡面的 <title>夾住的資料並顯示在 App 上面
<title>Central Weather Bureau Web Site</title>
本教學共分為三大步驟,分別是
第一步驟:安裝 libxml2
第二步驟: 安裝第三方 library
第三步驟:設計 View 與 Controller
請先開啟一個專案, 我是選擇 View-based Appication
再來進入 Project Setting, 你可以直接按 Groups & Files 的 Xcode icon ,也可以從 menu 進入
請進入 Build tab 然後在 search 框尋找 header search path
再來看到以下畫面後按下 + 增加 libxml 進入我們的 project 當中,再按下 okay 就會看到下面那張圖
"${SDKROOT}/usr/include/libxml2 記得勾選 Recursive
接下來要設定另一個參數,搜尋 Other Linker Flags
一樣增加 Flag 並輸入 –lxml2 為參數後按下 ok
如此一來就完成我們對於 xml 部份的配置
資料夾解開後會有很多檔案,請把裡面的幾個重要檔案抓出來
TFHpple.h , TFHpple.m , TFHppleElement.h , TFHppleElement.m , XPathQuery.h , XPathQuery.m
並加入我們的專案當中
如此一來就把 hpple 加入我們的專案當中了
第三步驟:設計 View 與 Controller程式部份不長,首先請打開 .h 標頭檔,並加入以下 code
- // .h 檔
- #import <UIKit/UIKit.h>
- #import "TFHpple.h"
- @interface htmlparserViewController : UIViewController {
- IBOutlet UILabel *mLabel; }
- @end
- // .m 檔
- - (void)viewDidLoad {
- [super viewDidLoad]; NSError* error;
- NSData *htmlData = [[NSString stringWithContentsOfURL:[NSURL
- URLWithString: @"http://www.cwb.gov.tw/eng/index.htm"]
- encoding:NSASCIIStringEncoding error:&error]
- dataUsingEncoding:NSUTF8StringEncoding];
- TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];
- NSArray *elements = [xpathParser search:@"//title"]; // get the title
- TFHppleElement *element = [elements objectAtIndex:0];
- NSString *h1Tag = [element content]; NSLog(@"result = %@",h1Tag);
- mLabel.text = h1Tag;
- }
接下來設計 UI , 請打開 xib 檔
先加入兩個 Label , 第一個 label 沒有互動,我們先輸入 “得到的資料為”
第二個 Label 放上去後請先調整大小,再來從 File’s Owner 按下 Control 拉線至該 label ,選擇 mLabel
如果一切都沒有問題,就可以測看看有沒有成功摟! 模擬器可以抓到該網站的 title 並顯示在 App 當中但是我如果是在 Device 上面做模擬,如果 iPhone 沒有開網路的話,就會發生問題,所以如果上傳到手機上面做測試的話請記得開啟你的網路喔。
恭喜你成功從網路上抓到資料。