【iOS】正则表达式抓取网页数据制作小词典
来源:互联网 发布:阿里云开启ssh端口 编辑:程序博客网 时间:2024/05/23 19:18
应用程序不一定要自己去提供数据,有现成的数据学会去用才好。
网络很大,各种搜索引擎每天到处爬。本文通过正则表达式抓取网站的数据来做一个小词典。
一、正则表达式的使用
1. 确定匹配方案,即pattern
2. 用pattern实例化NSRegularExpression
3. 用匹配方法开始匹配。
匹配一次:可以使用firstMatch方法
匹配多次:可以用matchs方法
正则表达式对照表:(在网上找到了一个很不错的表,正则表达式各个语言通用)
http://www.jb51.net/shouce/jquery1.82/regexp.html
下面是测试代码,能匹配出:xn4545945
//测试正则表达式用的- (void)findAnswerInHTMLTest { NSString *srcStr = @"http://blog.csdn.net/xn4545945"; NSString *pattern = @"xn[^\\s]*"; //匹配以xn开头的任何非空白字符//实例化正则表达式,需要指定两个选项//NSRegularExpressionCaseInsensitive 忽略大小写//NSRegularExpressionDotMatchesLineSeparators 让.能够匹配换行NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:nil]; //匹配出结果集NSTextCheckingResult *checkResult = [regex firstMatchInString:srcStr options:NSMatchingReportCompletion range:NSMakeRange(0, srcStr.length)]; // 取出找到的内容.NSString *result = [srcStr substringWithRange:[checkResult rangeAtIndex:0]]; NSLog(@"数据为----->%@", result);}
二、抓取网页数据,并制作小词典
用海词作为查询词典抓取数据。http://dict.cn
直接在网址后面拼接查询词即可查询,如查询“hello”,即http://dict.cn/hello
查看网页源代码如下图: 即抓取出 (打招呼)喂;你好 即可。
tips:
(.*?)来取出想要的内容.括号括住才能取出.抓网页用这个就够了.
*. 表示匹配任意字符
**表示重复0到多次
*? 表示尽量少的匹配.
*将需要取出的用(.*?)代替.大空格换行等用.*?代替,表示忽略.
结合浏览器的查找功能, 在源代码中查找,看选取的关键词是否有重复的.(找时更方便)
*选取稍微大点的块(标签中有id标记的为好),可以做到唯一.(如果选太小,可能一些小标签在网页中重复的次数非常多)
*然后多次调用正则表达式方法,逐步缩小范围.
*引号需要转义(加反斜杠).中文需要%转义.(用方法)
直接上代码:
@implementation XNSpider- (void)loadHTMLWithWord:(NSString *)word {//1.发送HTML请求, 得到返回的网页.(转换为字符串)NSString *urlString = [NSString stringWithFormat:@"%@%@", kBaseURL, word]; //拼接请求网址urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //中文转义NSURL *url = [NSURL URLWithString:urlString]; //得到URLNSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError) { //得到的data数据转换为字符串 NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];// NSLog(@"%@", html); //2.从返回的字符串中匹配出(正则表达式过滤)想要的. (另写一个方法findAnswerInHTML) //然后通过代理传递结果给主线程,用于更新UI NSString *result = [self findAnswerInHTML:html]; NSLog(@"%@", result); if ([self.delegate respondsToSelector:@selector(finishSpider:)]) { [self.delegate finishSpider:result]; //将完成后的结果通过代理传到UI线程中去.}}];}/** * 正则表达式匹配字符串的核心方法 * * @param html 输入的整个网页字符串 * * @return 返回匹配的结果 */- (NSString *)findAnswerInHTML:(NSString *)html {//将需要取出的用(.*?)代替. 大空格换行等用.*?代替,表示忽略.NSString *pattern = @"<ul class=\"dict-basic-ul\">.*?<li><span>(.*?)</span><strong>(.*?)</strong></li>";//实例化正则表达式,需要指定两个选项//NSRegularExpressionCaseInsensitive 忽略大小写//NSRegularExpressionDotMatchesLineSeparators 让.能够匹配换行NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:nil];//匹配出结果集NSTextCheckingResult *checkResult = [regex firstMatchInString:html options:NSMatchingReportCompletion range:NSMakeRange(0, html.length)];// 取出找到的内容. 数字分别对应第几个带括号(.*?), 取0时输出匹配到的整句.NSString *result = [html substringWithRange:[checkResult rangeAtIndex:2]];NSLog(@"数据为----->%@", result);return result;}
匹配结果最后使用代理传到主线程中去更新UI。
程序界面如下:(查询Android后,从网页中找到的数据为“机器人”)
出错处理这里就不做了。
程序源码如下:http://download.csdn.net/detail/xn4545945/7619349
转载请注明出处:http://blog.csdn.net/xn4545945
1 0
- 【iOS】正则表达式抓取网页数据制作小词典
- 正则表达式抓取网页数据 制作iOS小词典
- 利用正则表达式抓取网页上邮箱的小程序
- php curl与正则表达式抓取网页数据的例子
- 正则表达式抓取网页资源
- 正则表达式 抓取网页面上所有图片
- ObjC利用正则表达式抓取网页内容
- 正则表达式,抓取网页所有图片
- 正则表达式抓取网页中的邮箱地址
- java正则表达式抓取网页图片
- PHP 正则表达式抓取网页内容。
- BeautifulSoup+正则+Python 抓取网页数据
- php 正则抓取网页的table数据
- Python 数据抓取之正则表达式
- 抓取网页数据的小程序
- node.js 小爬虫抓取网页数据
- 正则表达式分析网页数据
- IOS应用抓取HTML网页数据
- 函数指针,堆栈
- VAO
- 华为招聘机试整理8:操作系统任务调度问题
- http://book.douban.com/doulist/4288094/
- git命令
- 【iOS】正则表达式抓取网页数据制作小词典
- as3的动态加载字库的做法, 纯代码
- linux命令 chmod +x filename.sh
- android 状态栏 导航栏隐藏显示控制方法及效果示例
- 色鬼的好人
- 洞庭湖
- poj1789 Truck History 最小生成树,kruskal
- 维汉一家亲 60岁维族大妈免费教市民跳新疆舞(图)
- LINUX-CENTOS 6.4 64 位 系统安装