iOS 開發: html parser 抓網頁資料_#import   

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

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

iOS 開發: html parser 抓網頁資料_#import_02

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

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

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

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


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


第一步驟:安裝 libxml2

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

第三步驟:設計 View 與 Controller



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

iOS 開發: html parser 抓網頁資料_xml_03

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

iOS 開發: html parser 抓網頁資料_html_04

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

iOS 開發: html parser 抓網頁資料_xml_05

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

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

iOS 開發: html parser 抓網頁資料_#import_06

iOS 開發: html parser 抓網頁資料_#import_07

 

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

iOS 開發: html parser 抓網頁資料_#import_08

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

iOS 開發: html parser 抓網頁資料_#import_09

iOS 開發: html parser 抓網頁資料_#import_10

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




iOS 開發: html parser 抓網頁資料_sed_11

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

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

iOS 開發: html parser 抓網頁資料_html_12

並加入我們的專案當中

iOS 開發: html parser 抓網頁資料_html_13

如此一來就把 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

iOS 開發: html parser 抓網頁資料_#import_14

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


iOS 開發: html parser 抓網頁資料_html_15

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