使用Objective-C解析HTML或者XML,系统自带有两种方式一个是通过libxml,一个是通过NSXMLParser。 libxml性能较好,且可以结合urlconnection实现边下载边解析,在要求快速 、分批响应UI到情况下较为有用,NSXMLParser基本没什么优势,不如使用第三方工具。
TFHpple,它是一个轻量级的包装框架,可以很好的解决这个问题,尤其是它支持HTML的解析,是其他XML类库所不及的地方,它是用XPath来定位和解析HTML或者XML。
使用步骤:
1.加入 libxml2 library 到你的项目
到Target中,选择Build Phases页
在Link Binary With Libraries中
从列表中选择libxml2.dylib
2.到https://github.com/topfunky/hpple 下载ZIP包
-将下面hpple的源代码加入到你的项目中:
HTFpple.h
HTFpple.m
HTFppleElement.h
HTFppleElement.m
XPathQuery.h
XPathQuery.m
3. xpath 权威教程 http://www.w3school.com.cn/xpath/index.asp
4.例子:
NSData *siteData = [NSData dataWithContentsOfURL:url];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:siteData];
self.listArray = [xpathParser searchWithXPathQuery:@"//ul[@class='v']/li[@class][position()=2]/img"];
NSArray *pageTotal = [xpathParsersearchWithXPathQuery:@"//ul[@class='pages']/li[@class='last']/a"];
if (pageTotal.count > 0) {
TFHppleElement *element = [pageTotal objectAtIndex:0];
TFHppleElement *element1 = [element children][1];
NSString *pageString = element1.content;
self.pageTotal = [pageString intValue];
}else {
self.pageTotal = 1;
}
NSArray *name = [xpathParsersearchWithXPathQuery:@"//ul[@class='info']/li[@class='avatar']/a/img"];
TFHppleElement *element = name[0];
NSDictionary *dic = [element attributes];
self.name = dic[@"title"];
self.imageUrl = [NSURL URLWithString:dic[@"src"]];
NSArray *detail = [xpathParsersearchWithXPathQuery:@"//div[@class='summary']/div[@_fr='more']"];
TFHppleElement *elementDetail = [detail[0] firstChild];
self.details = elementDetail.content;