iOS 解析HTML數據


  因為項目需要,今天特地查閱了 一些對HTML解析的文章,文章不算少,只是有的內容不是很全面,不太夠用,在此將他們補充到一起。

一、首先 先在項目中導入TFHpple  鏈接:https://github.com/zgGitHub/TFHpple

  1、添加libxml2.tbd庫

  2、添加一些路徑 在TAGER中的Build Setting中 找到 Hesder Search Paths 輸入兩個路徑 一個是libxml2.tbd庫在你的項目中的路徑;另一個是 $(SDKROOT)/usr/include/libxml2

  comment+b 查看是否運行正常

二、1、導入三個頭文件 

    

#import "XPathQuery.h"

    #import "TFHpple.h"

    #import "TFHppleElement.h"

 

  2、首先將網頁的html轉換成oc能夠認識的NSString數據;

    (1)如果你的HTML頁面是保存在項目中的,用如下方法:

      

NSString *dataString = [NSString stringWithContentsOfFile:[[NSBundle       mainBundle]pathForResource:@"瀑布流" ofType:@"html"] encoding:NSUTF8StringEncoding error:nil];

 

    (2)如果是從網絡上請求的 用這個方法:

     

 NSString *dataString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.lomowo.com/posts/47632"] encoding:NSUTF8StringEncoding error:nil];

 

  3、如果不想整篇幅的取值 ,可以截取自己想要的內容

   

NSRange rang1=[dataString rangeOfString:@"<div class=\"content\">"];

      NSMutableString *imageStr2=[[NSMutableString alloc]initWithString:[dataString substringFromIndex:rang1.location+rang1.length]];

    

      NSRange rang2=[imageStr2 rangeOfString:@"<div class=\"clear\">"];

      NSMutableString *imageStr3=[[NSMutableString alloc]initWithString:[imageStr2 substringToIndex:rang2.location]];

    

      NSLog(@"%@",imageStr3);

  imageStr3:

 

    

  4、將dataString轉換成NSData,給TFHpple類用

 NSData *data=[imageStr3 dataUsingEncoding:NSUTF8StringEncoding];

  5、根據標簽<p>找到自己想要的代碼塊

 TFHpple *xpathParser = [[TFHpple alloc]initWithHTMLData:data];
    // 根據標簽進行篩選 獲取所有標簽是<p>的代碼塊
     NSArray *elements  = [xpathParser searchWithXPathQuery:@"//p"];
    NSMutableArray *contArray = [[NSMutableArray alloc]init];

  6、獲取想要的標簽內容

//開始整理數據
    for (TFHppleElement *elsement in elements) {
        if ([elsement content] != nil) {

            if (![[elsement objectForKey:@"style"]isEqualToString:@"text-align"]) {//篩選屬性是里有style 並且值是text-align的標簽
                
                //打印出該節點的所有內容  包括標簽
                NSLog(@"%@",elsement.raw);
                //打印出該節點的所有內容   不包括標簽
                NSLog(@"%@",elsement.text);
            }
        }
    }

  得到的結果:

 

  7、獲取想要的標簽屬性

  //開始整理數據
    for (TFHppleElement *elsement in elements) {
        if ([elsement content] != nil) {
            
            //將這段代碼轉換成字典  key是標簽內的屬性  value是屬性對應的值
            //得到的是標簽屬性  不能得到標簽內容
            NSDictionary *elementContent =[elsement attributes];
            NSLog(@"-----------%@",elementContent);
            
            if (elementContent != nil) {
                [contArray addObject:[elementContent objectForKey:@"style"]];
            }
           
        }
    }

  得到的結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM