iOS开发之html解析

使用XPath解析html

可以从此处https://github.com/topfunky/hpple下载工程,将TFHpple.h,TFHpple.m,TFHppleElement.h,TFHppleElement.m,XPathQuery.h,XPathQuery.m加到自己的项目中,在Frameworks中导入libxml2.x

在项目中找到Other Linker Flags,加入-libxml2

在项目中找到Header Search Paths,加入/usr/include/libxml2

代码如下:

 1 NSString *urlString = nil;
 2
 3 urlString = @"http://www.xiyou.edu.cn/new/lm.jsp?urltype=tree.TreeTempUrl&wbtreeid=724";
 4
 5 NSData *htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
 6
 7 NSData *toHtmlData = [self toUTF8:htmlData];
 8
 9 TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:toHtmlData];
10
11
12 NSArray *aArray = [xpathParser searchWithXPathQuery:@"//a"];
13
14 if ([span count] > 0) {
15
16             for (int i = 87; i < 102; i++) {
17                             //从<a>的第82个开始取值,共获取15个值
18                 TFHppleElement *aElement = [aArray objectAtIndex:i];
19                 NSArray *aArr = [aElement children];
20                 TFHppleElement *aEle = [aArr objectAtIndex:0];
21                 NSArray *aChild = [aEle children];
22                 TFHppleElement *aChildEle = [aChild objectAtIndex:0];
23                 NSArray *aChildren = [aChildEle children];
24                 NSString *aStr = [[aChildren objectAtIndex:0] content];
25                 NSLog(@"aStr:%@",aStr);
26                 NSDictionary *aAttributeDict = [aElement attributes];
27                 NSLog(@"aAttributeDict:%@",aAttributeDict);
28
29                             //获取a中的属性值
30                 NSString *hrefStr = [NSString stringWithFormat:@"http://www.xiyou.edu.cn%@",[aAttributeDict objectForKey:@"href"]];
31                 NSLog(@"hrefStr:%@",hrefStr);
32
33                 [currentNewsArr addObject:aStr];
34                 [currentHrefArr addObject:hrefStr];
35
36             }
37 [htmlData release];
38 [xpathParser release];
39 }
40
41 //如果解析的网页不是utf8编码,如gbk编码,可以先将其转换为utf8编码再对其进行解析
42
43 -(NSData *) toUTF8:(NSData *)sourceData {
44     CFStringRef gbkStr = CFStringCreateWithBytes(NULL, [sourceData bytes], [sourceData length],kCFStringEncodingGB_18030_2000, false);
45
46     if (gbkStr == NULL) {
47         return nil;
48     } else {
49         NSString *gbkString = (NSString *)gbkStr;
50         //根据网页源代码中编码方式进行修改,此处为从gbk转换为utf8
51              NSString *utf8_String = [gbkString stringByReplacingOccurrencesOfString:@"META http-equiv="Content-Type" content="text/html; charset=GBK""
52                                                                       withString:@"META http-equiv="Content-Type" content="text/html; charset=UTF-8""];
53
54         return [utf8_String dataUsingEncoding:NSUTF8StringEncoding];
55     }
56 }

http://blog.csdn.net/majiakun1/article/details/39472489

时间: 2024-11-07 18:23:28

iOS开发之html解析的相关文章

iOS开发之XML解析

iOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

IOS开发之XML解析以及下拉刷新上拉加载更多的分享

IOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

iOS开发之XML解析代码

iOS开发之XML解析代码 //1.加载和解析XML文件 NSString *path = [[NSBundle mainBundle] pathForResource:@"xml.txt" ofType:nil]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; // GDataXMLDocument 表示XML文档对象 // initWithData 使用NSData初始化, 就是解析 GDataXMLDoc

iOS开发之JSON解析

JSON解析步骤: - (NSArray *)products { if (_products == nil) { //第一步:获取JSON文件的路径: NSString *path = [[NSBundle mainBundle] pathForResource:@"products.json" ofType:nil]; //第二步:加载JSON文件: NSData *data = [NSData dataWithContentsOfFile:path]; //第三步:将JSON数据

iOS开发之block解析

1. block的本质是一个Objective-C的对象.为什么这么说? 在Objective-C中.runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型.也能够觉得一个对象.它具有isa指针.就是一个OC对象 2. 你怎么知道block有isa指针呢.我们能够通过clang命令将来看block的实现 //測试代码 int main(int argc, const char * argv[]) { @autoreleasepool { void(^blk)(void)=^{

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队

iOS开发之AFNetworking开源库的使用

iOS开发之AFNetworking开源库的使用 1.简介 常见的处理网络请求方式 (1)NSURLConnection/NSURLSession (2)ASIHttpRequest 早期项目中比较常见, 由于作者不更新了 (3)AFNetworking 推荐使用, 项目中使用 (4)MKNetworkKit 试试 2.配置和使用 2.1 配置 库文件拖入工程中, 包含头文件 #import "AFNetworking.h" 2.2 使用 //演示AFNetworking的使用 //1

李洪强iOS开发之iOS好文章收集

李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器 2015-05-12 20:13:00 iOS9适配技巧 图iOS9适配新技巧 2015-09-29 09:01 TextKit分页效果 图文混排 2015年6月1日 iPhone 6 / 6 Plus 设计·适配方案 屏幕适配 2014-11-2

IOS开发之copy的问题

copy的目的就是修改副本,修改原始对象和副本时不会产生干扰. 定义一个不可变属性A,再定义一个可变属性B.用B做添加删除等操作后再将B赋值给A时,有些人习惯用A = B:其实这样是不安全的. 假设有下面的一段代码: ? 1 2 3 4 5 6 7 8 9 10   int main() {    NSMutableString *strM = [NSMutableString [email protected]"123"];    NSString *str = strM;    N