/**
- 将需要单次的整个网页弄下来,获取到完整的HTML字符串,以便后续拆分处理
- 缩小页面范围,把不相关内容删除掉,要把字符串弄小 */
这里是设置正则抓取的要点 // 1. 要缩短,需要使用一门新技术,正则表达式NSRegularExpression // 演练,抓title /* 要使用正则表达式步骤
1> 指定匹配方案 * 打开网页源代码,找到需要抓取的部位 * 将前后标记一起复制到代码中,然后用(.*?)替代我们需要抓到的内容即可 2> 实例化正则表达式,需要指定两个选项 NSRegularExpressionCaseInsensitive 忽略大小写 NSRegularExpressionDotMatchesLineSeparators 让.能够匹配换行 3> 使用firstMatchInString查找第一个与匹配方案相同的内容 4> 根据result的rangeAtIndex方法,获取到要抓取的内容 第一个括号对应的索引是1,第二个是2,依次类推 5> 根据range,使用字符串的substringWithRange方法,可以获得准确的内容 */ //
// pyViewController.m // 010501-数据抓取 // // Created by panyong on 14-1-5. // Copyright (c) 2014年 panyong. All rights reserved. //
#import "pyViewController.h"
@interface pyViewController ()<UITextFieldDelegate>
@end
@implementation pyViewController
- (void)viewDidLoad { [super viewDidLoad];
} //我这里的我是设置抓取的是的豆瓣的网址: //这里是输入框自动输入的内容,设置了text代理 -(BOOL)textFieldShouldReturn:(UITextField *)textField { [self searchWord:textField.text]; //键盘,是去第一 [textField resignFirstResponder]; //这里开始调用 return YES; }
//搜索 -(void)searchWord:(NSString *)str { NSLog(@"%@",str); NSURL *url = [NSURL URLWithString:str]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //在这里将data数据转换为html数据,然后传给一个函数让其正则匹配 //NSLog(@"%@",string); [self regexp:string];}];
}
//使用正则匹配 -(void)regexp:(NSString )string { //设置匹配规则 NSString ruler = @"<div class="cc">(.?)</div>(.?)</div>"; // NSString rul = @"</table></div><br>(.?)<>"; NSString *str = [self matchHTML:string withRuler:ruler ]; //输出匹配到的内容 //NSLog(@"%@",str); self.myText.text = str;
}
//返回匹配好的字符串 -(NSString *)matchHTML:(NSString *)string withRuler:(NSString *)ruler { //实例化正则表达式 NSError *err = Nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:ruler options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:&err]; if (err) { NSLog(@"匹配不模式错误"); }
//开始匹配把,要把这个匹配的内容找到才好啊NSTextCheckingResult *firstMatch = [regex firstMatchInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length)];NSLog(@"%@",firstMatch);if (firstMatch) { //设置范围 NSRange range = [firstMatch rangeAtIndex:2]; //输出匹配到的内容 NSLog(@"测试输出测试输出测试输出测试输出测试输出测试输出---------------%@--------------------",[string substringWithRange:range]); return [string substringWithRange:range];} return @"没有匹配到内容";
}
@end
,谢谢,如果有什么写错的,或者不好的地方,欢迎与本人交流!