您的位置:首页 > Web前端 > HTML

使用TFHpple第三方库解析html简介

2015-08-06 20:59 477 查看
使用XPath解析html

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

1、Frameworks中导入libxml2.x
2、在项目中找到Header Search Paths,加入/usr/include/libxml2

3、

- (void)parserHtml{

NSData *htmlData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:kUrl]];

//创建解析器

TFHpple *xpathParser = [[TFHpple alloc]initWithHTMLData:htmlData];

NSArray *divArray = [xpathParser searchWithXPathQuery:@"//div"];

if ([divArray count]) {

//根据需求解析数据

// NSLog(@"%@",divArray);

TFHppleElement *element1 = [divArray objectAtIndex:6];

NSArray *arr = [element1 children];

// NSLog(@"%@",arr);

for (TFHppleElement *element in arr) {

NSLog(@"%@",[element content]);

[_str appendString:[element content]];

//NSDictionary *aAttributeDict = [aElement attributes];//这是获取元素中的属性

[_str appendString:[NSString stringWithFormat:@"\n"]];

}

}

}

与上方代码有区别:

//如果解析的网页不是utf8编码,如gbk编码,可以先将其转换为utf8编码再对其进行解析

-(NSData *)toUTF8:(NSData *)sourceData {

CFStringRef gbkStr =CFStringCreateWithBytes(NULL,[sourceData bytes],[sourceData
length],kCFStringEncodingGB_18030_2000,false);

if (gbkStr ==

NULL) {

returnnil;

}
else {

NSString*gbkString = (NSString*)gbkStr;

//根据网页源代码中编码方式进行修改,此处为从gbk转换为utf8

NSString
*utf8_String =[gbkString stringByReplacingOccurrencesOfString:@"METAhttp-equiv="Content-Type" content="text/html; charset=GBK""

withString:@"META http-equiv="Content-Type"content="text/html; charset=UTF-8""];

return[utf8_String
dataUsingEncoding:NSUTF8StringEncoding];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: