iOS解析html
2015-10-06 19:48
573 查看
在一些情况下我们在工程中需要解析html中的数据,TFHpple是一个非常方便的三方类.它可以根据标签解析html数据,应用比较简便.
首先要先做一下准备工作
下载TFHpple:https://github.com/topfunky/hpple,将文件夹拖入到工程中.
TFHpple的工作原理是事先根据URL将html数据转化为NSData类型.然后再根据标签解析数据.
需要注意的是.从标签解析出来的数据是用数组存储的,而数组中存储的是TFHppleElement类型的对象.如果要完全取出数据.则需要使用TFHppleElement对象的属性.主要有text(取出文本),raw(取出标签所有内容),attributes(取出标签所包含的属性,返回值是字典),children(取出标签下所有子标签,返回数组).
其实,TFHpple的使用还是比较简单,html解析难在分析html的标签上.如果想要取的数据标签嵌套的比较复杂,想要取出来非常的费工夫.在这种情况下,首选的还应该是webView.
首先要先做一下准备工作
下载TFHpple:https://github.com/topfunky/hpple,将文件夹拖入到工程中.
TFHpple的工作原理是事先根据URL将html数据转化为NSData类型.然后再根据标签解析数据.
- (void)viewDidLoad { NSString *str = [NSString stringWithFormat:@BrandDisplayDetailURL, self.brandId]; NSLog(@"%@" , str); NSData *data = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:str]]; [self handelHTML:data]; } #pragma mark - 解析html - (void) handelHTML:(NSData *)data { TFHpple *xpathParser = [[TFHpple alloc]initWithHTMLData:data]; NSMutableArray *arr = [xpathParser searchWithXPathQuery:@"//a"].mutableCopy; NSMutableArray *arrMark = [xpathParser searchWithXPathQuery:@"//mark"].mutableCopy; NSMutableArray *arrPrice = [xpathParser searchWithXPathQuery:@"//span"].mutableCopy; NSMutableArray *arrPicURL = [xpathParser searchWithXPathQuery:@"//img"].mutableCopy; for (NSInteger i = 0; i<arr.count; i++) { TFHppleElement *hpple = arr[i]; if (hpple.text != nil && ![hpple.text isEqualToString:@"查看更多..."]) { [self.titleArr addObject:hpple.text]; }else{ NSDictionary *dic = hpple.attributes; if (![[dic objectForKey:@"href"] isEqualToString:@"javascript:getData()"]) { NSString *str = [dic objectForKey:@"href"]; NSArray *divArr = [str componentsSeparatedByString:@":"]; [self.popID addObject:divArr[2]]; } } } for (NSInteger i = 0; i < arrMark.count; i++) { TFHppleElement *hpple = arrMark[i]; if (hpple.text != nil) { [self.markArr addObject:hpple.text]; } } for (NSInteger i = 0; i < arrPrice.count; i++) { TFHppleElement *hpple = arrPrice[i]; if (hpple.text != nil) { [self.priceArr addObject:hpple.text]; } } for (NSInteger i = 0; i < arrPicURL.count; i++) { TFHppleElement *hpple = arrPicURL[i]; NSDictionary *dic = hpple.attributes; [self.picURLArr addObject:[dic objectForKey:@"date-src"]]; } [self.brandDetailTableView reloadData]; }
需要注意的是.从标签解析出来的数据是用数组存储的,而数组中存储的是TFHppleElement类型的对象.如果要完全取出数据.则需要使用TFHppleElement对象的属性.主要有text(取出文本),raw(取出标签所有内容),attributes(取出标签所包含的属性,返回值是字典),children(取出标签下所有子标签,返回数组).
其实,TFHpple的使用还是比较简单,html解析难在分析html的标签上.如果想要取的数据标签嵌套的比较复杂,想要取出来非常的费工夫.在这种情况下,首选的还应该是webView.
相关文章推荐
- ios:点击一个button不断切换背景图片
- iOS常用设计模式:MVC、单例、代理、观察者。
- IOS 解析XML--使用NSXML
- iOS:多线程同步加锁的简单介绍
- IOS 高德地图
- iOS 代理传值
- IOS 提交审核,Missing Push Notification Entitlement
- ios图片压缩
- iOS之 LLDB调试常用命令
- ios 本地通知
- iOS中的定时器
- iOS 使用MJRefresh刷新
- iOS中的(null) <null> nil 问题
- 关于ios9中得ALAssetsLibrary框架过时问题
- iOS开发小项目之找色块游戏
- 关于ios8中CMStepCounter过时的问题
- 升级IOS9错误解决方案:Unexpected CFBundleExecutable Key.The bundle atXXXX
- iOS开发之 简易随机点名册的设计
- ios程序后台运行时,当有消息推送过来,如何修改程序角标上是数字
- iOS 自制汤姆猫