摘要:准备工作导入引入静态库文件中的添加解析步骤初始化根据创建实例查找节点存入数组在该节点下循环查找子节点源代码看了本网球优等生分钟前最后回复来自代码每页主题通过在数组中循环查找子节点这段被正则表达代替子节点头像子节点标题链接获得标题获得
准备工作
1.导入TFHpple
2.引入静态库文件libxml2.2.dylib
3.PROJECT 中的 Search Path - header search paths添加 /usr/include/libxml2
1.初始化data
2.根据data创建TFHpple实例
3.查找节点存入数组
4.在该节点下 循环查找子节点
源HTML代码:
看了本「网球优等生」 ACG • zhangyi2099 • 20 分钟前 • 最后回复来自 yishanxin 1
Object-C代码
NSData *htmlData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://www.xxx.com/xxxx?x=1"]]; TFHpple *xpathParser = [[TFHpple alloc]initWithHTMLData:htmlData]; #pragma mark 每页主题 NSArray *itemArray = [xpathParser searchWithXPathQuery:@"//div[@class = "cell item"]"]; //通过for in 在itemArray数组中 循环查找子节点 for (TFHppleElement *hppleElement in itemArray) { /*** 这段被正则表达代替 @"//div[@class = "cell item"]"] if ([[hppleElement objectForKey:@"class" ] isEqualToString:@"cell item"]) { [self.allDataMutableArray addObject:hppleElement]; } */ #pragma mark 子节点头像 NSArray *IMGElementsArr = [hppleElement searchWithXPathQuery:@"//img"]; for (TFHppleElement *tempAElement in IMGElementsArr) { NSString *imgStr = [tempAElement objectForKey:@"src"]; NSString *subStr = [@"http:" stringByAppendingString:imgStr]; [self.avatarMutableArray addObject:subStr]; } #pragma mark 子节点标题/链接 NSArray *TitleElementArr = [hppleElement searchWithXPathQuery:@"//span[@class="item_title"]"]; for (TFHppleElement *tempAElement in TitleElementArr) { //获得标题 NSString *titleStr = [tempAElement content]; //1.获得子节点(正文连接节点) 2.获得节点属性值 3.加入到字典中 NSArray * arr = [tempAElement children]; TFHppleElement *href = arr.firstObject; NSString * titleHrefStr = [href objectForKey:@"href"]; [self.allDataMutableDict setObject:titleStr forKey:@"title"]; self.allDataMutableDict[@"titleHref"] = titleHrefStr; } #pragma mark 子节点fade //简化写法 简化3步 NSArray *nodeElementArr = [hppleElement searchWithXPathQuery:@"//a[@class="node"]"]; self.allDataMutableDict[@"node"] = [nodeElementArr.firstObject content]; NSArray *fadeElementArr = [hppleElement searchWithXPathQuery:@"//span[@class = "small fade"]"]; NSArray *subArray = [ [fadeElementArr.firstObject content] componentsSeparatedByString:@" • "]; self.allDataMutableDict[@"louZhu"] = [subArray objectAtIndex:1]; self.allDataMutableDict[@"lastTime"] = [subArray objectAtIndex:2]; #pragma mark 子节点回复数 NSArray * repeatElementArr = [hppleElement searchWithXPathQuery:@"//a[@class = "count_livid"]"]; if ([repeatElementArr.firstObject content ]) { self.allDataMutableDict[@"repeatCount"] = [repeatElementArr.firstObject content]; }else{ self.allDataMutableDict[@"repeatCount"] = [NSString stringWithFormat:@"%d",0]; } #pragma mark 转化model 存进数组 [model setValuesForKeysWithDictionary:self.allDataMutableDict]; [self.allDataMutableArray addObject:model]; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/15882.html
摘要:主要对当前排名前的项目做一个简单的简介方便初学者快速了解到当前在的情况地址若有任何疑问可通过微博李锦发联系我项目名称项目信息作者是的博主开发界的大神级人物毕业于卡内基梅隆大学开源了许多牛逼的项目这个便是其中之一采用主要方便与服务端进 主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. Git...
摘要:所以,关于优化实战我们主要分为两部分加载渲染链路优化和编程代码优化。加载渲染链路优化从访问到页面呈现,整个链路可以做优化的思路。资源缓存这一节我们单独介绍缓存,是的,利用好缓存可以解决很多问题,包括页面加载和渲染的问题都能得到很好的优化。 优化实战 本文属于思否课堂VirtualDOM到AST玩转前端性能原理解析与代码实战课程官方博客:fed123.com 我们已经全面分析总结了评估页...
摘要:所以,关于优化实战我们主要分为两部分加载渲染链路优化和编程代码优化。加载渲染链路优化从访问到页面呈现,整个链路可以做优化的思路。资源缓存这一节我们单独介绍缓存,是的,利用好缓存可以解决很多问题,包括页面加载和渲染的问题都能得到很好的优化。 优化实战 本文属于思否课堂VirtualDOM到AST玩转前端性能原理解析与代码实战课程官方博客:fed123.com 我们已经全面分析总结了评估页...
摘要:所以,关于优化实战我们主要分为两部分加载渲染链路优化和编程代码优化。加载渲染链路优化从访问到页面呈现,整个链路可以做优化的思路。资源缓存这一节我们单独介绍缓存,是的,利用好缓存可以解决很多问题,包括页面加载和渲染的问题都能得到很好的优化。 优化实战 本文属于思否课堂VirtualDOM到AST玩转前端性能原理解析与代码实战课程官方博客:fed123.com 我们已经全面分析总结了评估页...
摘要:基于原生主要是针对基于比较来说的,基于的我不想再讨论了,我想尝试的是从到功能都是原生,而不是用模拟的所谓原生体验。 基于原生主要是针对基于webview+h5比较来说的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,而不是用H5模拟的所谓原生体验。 背景 我们从开发角度来考虑,但凡想从事长远的开发工作,都有自己的技术积累,最简单的就是一些UI组件和功能组件的封装。 举例,...
阅读 633·2021-09-22 15:17
阅读 1706·2021-09-22 15:06
阅读 1980·2021-09-08 09:35
阅读 4852·2021-09-01 11:43
阅读 3247·2019-08-30 15:55
阅读 1977·2019-08-30 12:48
阅读 2950·2019-08-30 12:45
阅读 1681·2019-08-29 17:31