码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 解析HTML数据

时间:2016-11-22 20:10:14      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:isequal   raw   attr   解析   开始   nbu   undle   geo   nts   

  因为项目需要,今天特地查阅了 一些对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"]];
            }
           
        }
    }

  得到的结果:

技术分享

 

iOS 解析HTML数据

标签:isequal   raw   attr   解析   开始   nbu   undle   geo   nts   

原文地址:http://www.cnblogs.com/lychee-li/p/6090450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!