博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios万能抓取
阅读量:6650 次
发布时间:2019-06-25

本文共 2746 字,大约阅读时间需要 9 分钟。

hot3.png

/**

  1. 将需要单次的整个网页弄下来,获取到完整的HTML字符串,以便后续拆分处理
  2. 缩小页面范围,把不相关内容删除掉,要把字符串弄小 */

这里是设置正则抓取的要点 // 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

,谢谢,如果有什么写错的,或者不好的地方,欢迎与本人交流!

转载于:https://my.oschina.net/panyong/blog/190545

你可能感兴趣的文章
java泛型中<?>和<T>有什么区别?
查看>>
CPU和GPU的差别
查看>>
搜索引擎爬虫蜘蛛的USERAGENT大全
查看>>
集群 & 负载均衡
查看>>
HA模式下历史服务器配置
查看>>
vim 打开高亮和关闭高亮
查看>>
SQL Server-外部联接基础回顾(十三)
查看>>
在Ubuntu下进行MongoDB安装步骤
查看>>
在Spring Data JPA 中使用Update Query更新实体类
查看>>
mysql关于字符串字段数据类型
查看>>
使用merge同时执行insert和update操作
查看>>
Ubantu16.4的安装过程以及基本配置
查看>>
imx6平台qt锯齿原因分析
查看>>
HashMap与ConcurrentHashMap的区别
查看>>
LXD 2.0 系列(四):资源控制
查看>>
yum安装nginx详解
查看>>
"ImportError: cannot import name OVSLegacyKernelSwitch"
查看>>
2017第3周五
查看>>
[Unity3D]Unity+Android交互教程——让手机"动"起来
查看>>
jQuery EasyUI 入门简介
查看>>