从HTML字符串中读取和获取值

时间:2012-08-05 14:47:09

标签: iphone ios xcode arrays xcode4

我有一个有趣的场景,需要知道它是否可以在Cocoa中完成。

我已经尝试过但未能找到一个免费的每小时天气预报API,并且会让我看到某个城市/邮政编码的每小时预报。因此,对于另一种方法,我要做的是阅读整个HTML页面源并尝试查看是否可以去除每小时天气部分,以便我可以在我的iPhone应用程序中使用它。

NSString *request = @"http://www.findlocalweather.com/hourly/il/chicago.html";

    NSURL *URL = [NSURL URLWithString:request];
    NSError *error;    
    NSString *HTML = [NSString stringWithContentsOfURL:URL encoding:NSASCIIStringEncoding error:&error];

    NSLog(@"HTML: %@", HTML);

如果您转到http://www.findlocalweather.com/hourly/il/chicago.html链接,则会看到网格每小时预测。我需要做的是从HTML源我需要读取每个日期,云和临时线并将其放入数组。 e.g。

NSMutableArray1将包含对象“AUG 05 9:00 AM,AUG 05 10:00 AM,AUG 05 11:00 AM ...”

NSMutableArray2将包含“多云,多为阳光......”的对象

NSMutableArray3将包含对象“73,84,76,91 ......”(临时度数)

可以这样做吗?有没有人试过解析HTML页面源代码字符串以获得你想要的东西?

2 个答案:

答案 0 :(得分:1)

您可以使用NSRegularExpression

轻松完成
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:EnterStringWithPatternHere options:0 error:NULL];
NSArray *matches = [regex matchesInString:webPage options:0 range:NSMakeRange(0, [webPage length])];

有一些很好的教程如何使用正则表达式(它们在大多数编程语言中几乎相同,但是要考虑NSRegEx的特性)

示例:从HMTL文件中解析pdf链接。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"href=\"([^<>]*).pdf\"" options:0 error:NULL];
NSArray *matches = [regex matchesInString:webPage options:0 range:NSMakeRange(0, [webPage length])];
for (int i=0; i<[matches count]; i++) {
    NSTextCheckingResult *match = [matches objectAtIndex:i];
 NSString *theFullString = [NSString stringWithFormat:@"%@.pdf",[webPage   substringWithRange:[match rangeAtIndex:1]]];}

我刚才写了这段代码。我建议你试验一下并使用NSLog或断点。这将有很大帮助。进入RegEx Stuff需要一些时间,但效果非常好。

答案 1 :(得分:0)

XML Parser NSXMLParser也可用于HTML。它使用委托方法以递增方式处理文档的元素,因此您必须构建提取的字段。您必须查看返回的HTML文档的结构,以查看要提取的元素(标记),然后将代码相应地放入委托方法didEndElement中。