我有一个有趣的场景,需要知道它是否可以在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页面源代码字符串以获得你想要的东西?
答案 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中。