博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过url,获取html内容,并解析
阅读量:6970 次
发布时间:2019-06-27

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

  hot3.png

1、第一种获取方式 :通过过stringWithContentsOfURL获取   NSString *urlstring= [NSString stringWithFormat:@"http://baidu.com/=%@",string1];// 此处网址不对,只是示意可以生成一个动态的urlstring   //抓取网页中 网释义内容      NSString * encodedString1 = (NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)urlstring, NULL, NULL,  kCFStringEncodingUTF8 );      NSURL *url1 = [NSURL URLWithString:encodedString1];      NSString *retStr = [NSString stringWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];//[[NSString alloc] initWithData:data encoding:];      NSLog(@" html = %@",retStr);    上述方式获取的内容时有一个弊端,当网络不是太好时,会阻塞在stringWithContentsOfURL这里,导致程序假死,(可以通过创建一个线程的方式,来获取数据,这样不好阻塞主线程),或者你可以使用第二种方式:    2、第二种方式:通过NSURLConnection获取//获取指定网页的内容   NSString *urlString= [NSStringstringWithFormat:@"http://baidu.com"];      NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString,NULL, NULL, kCFStringEncodingUTF8 );      NSURL *url =[NSURLURLWithString:encodedString];      NSMutableURLRequest *req=[[NSMutableURLRequestalloc]                                 initWithURL:url                                 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData                                 timeoutInterval:30.0];      receivedData=[[NSMutableDataalloc] initWithData:nil];//接受数据      [req setHTTPMethod: @"POST"];      NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:req delegate:self startImmediately:YES];      [req release];      [connection release];    在委托方法中接受数据,这种方式是异步的,不会阻塞当前线程,获取数据时,你可以做别的事情  - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  { //简单错误处理      UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"出错了"message:@"网络链接异常" delegate:nilcancelButtonTitle:@"OK" otherButtonTitles:nil];      [alert show];      [alert release];  }    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  {      [receivedData setLength:0];//置空数据        }    //接收NSData数据  - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data   {      [receivedData appendData:data];  }    //接收完毕,显示结果  - (void)connectionDidFinishLoading:(NSURLConnection *)connection   {      [connection cancel];      NSString *results = [[NSStringalloc]                            initWithBytes:[receivedDatabytes]                            length:[receivedDatalength]                            encoding:NSUTF8StringEncoding];// 注意数据编码方式,选中正确的编码方式,防止乱码      [selfloadingNetDescription:results];      [results release];  //    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"数据" message:@"下载完成" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];  //    [alert show];  //    [alert release];  //    NSLog(@"%@",results);  }       其实还有一种曲折的方式来获取url对应的网页内容,就是通过webView加载对应url,   [mWebViewloadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:encodedString]]];  在其委托方法:  webViewDidFinishLoad中通过js来获取相应的网页内容;  例如:NSString *allHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];  更具体的可以参考:stringByEvaluatingJavaScriptFromString这个函数的用法    通过上面的方式获取到html数据后,就可以通过字符串的一些处理函数来获取自己像要的内容(当然你也可以用一些xml解析库来进行解析,此处,只简单介绍一下字符串的处理):  简单实例://获取两个body之间的内容:htmlString为上面获取的html字符串     NSRange range1 = [htmlString rangeOfString:@""];// 返回的location是在htmlString中的起始位置,使用是注意      NSRange range2 = [htmlString rangeOfString:@""];  if(range3.location !=NSNotFound && range3.length!=0)//简单的判断,不全,使用时注意补全     {          NSString* bodyString= [retStr substringWithRange:NSMakeRange(range1.location, range2.location-range1.location+range2.length)];  NSLog(@"%@"bodyString);  }  补充一些字符串常用处理函数:  1、替换字符串   //将数据中的“回车换行”换成网页中的回车符
NSString *localString= [descriptionOne stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; //从字符串开头一直截取到指定位置,但不包括该位置的字符 // NSString *first =[string1 substringToIndex:range.location-1] ; // //从指定位置开始获取之后的所有字符(包括指定位置的字符) // NSString *last = [string1 substringFromIndex:range.location+1]; // //按照所给位置,长度,任意的从字符串中截取子串 // NSString *word = [string1 substringWithRange:NSMakeRange(range.location-1, 1)];

 

转载于:https://my.oschina.net/huqiji/blog/809642

你可能感兴趣的文章
5.22-zabbix监控Nginx
查看>>
OSChina 周三乱弹 ——纪念Bob Taylor
查看>>
OSChina 周一乱弹 ——爱丽三个小时没吃鱼罐头了
查看>>
OSChina 周六乱弹 ——程序员还是大学生的时候 带啥去上学
查看>>
nginx在linux环境下安装
查看>>
14_02_Linux系统启动流程详解之二 内核及init
查看>>
Android Material风格的应用(一)--AppBar TabLayout
查看>>
EasyUI的渣性能
查看>>
puppet自动化运维之cron资源
查看>>
Linux系统下MongoDB的简单安装与基本操作
查看>>
XEN虚拟机复制
查看>>
redis未授权访问导致的安全问题
查看>>
salt Syndic 的实现
查看>>
JSP/Java 获取路径问题
查看>>
我的友情链接
查看>>
43、源码安装MariaDB
查看>>
使用VisualVM、JMC远程监控JVM
查看>>
菜鸟如何应对服务器被黑
查看>>
Java Map接口
查看>>
利用awk i=!i 来输出奇偶行详解
查看>>