0

我有一个有趣的场景,需要知道它是否可以在 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 源代码。例如

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

NSMutableArray2 将包含对象“多云,多晴......”

NSMutableArray3 将包含对象“73、84、76、91 ....”(以度为单位的温度)

这可以做到吗?任何人都尝试过解析 HTML 页面源字符串以获取您想要的内容吗?

4

2 回答 2

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 需要一些时间,但效果非常好。

于 2012-08-05T15:38:10.260 回答
0

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

于 2012-08-05T20:49:57.173 回答