我发现使用hpple非常有用来解析凌乱的HTML。 Hpple项目是用于解析HTML的XPathQuery库上的Objective-C包装器。 使用它,您可以发送XPath查询并接收结果。
要求:
- 将libxml2添加到您的项目中
菜单项目 - >编辑项目设置
搜索设置“标题搜索路径”
添加新的搜索路径“$ {SDKROOT} / usr / include / libxml2”
启用递归选项
- 将libxml2库添加到您的项目中
菜单项目 - >编辑项目设置
搜索设置“其他链接标志”
添加新的搜索标记“-lxml2”
- 从hpple获取以下源代码文件,并将它们添加到您的项目中:
TFpple.h
TFpple.m
TFppleElement.h
TFppleElement.m
XPathQuery.h
XPathQuery.m
- 在w3school XPath教程中散步,以便对XPath语言感到满意。
代码示例
#import "TFHpple.h"
NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"];
// Create parser
xpathParser = [[TFHpple alloc] initWithHTMLData:data];
//Get all the cells of the 2nd row of the 3rd table
NSArray *elements = [xpathParser searchWithXPathQuery:@"//table[3]/tr[2]/td"];
// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];
// Get the text within the cell tag
NSString *content = [element content];
[xpathParser release];
[data release];
已知的问题
由于hpple是XPathQuery的包装器,它是另一个包装器,因此该选项可能不是最有效的。 如果性能是项目中的问题,我建议基于hpple和xpathquery库代码编写自己的轻量级解决方案。