通过url,获取html内容,并解析

  1. 1、第一种获取方式 :通过过stringWithContentsOfURL获取  
  2.  NSString *urlstring= [NSString stringWithFormat:@"http://baidu.com/=%@",string1];// 此处网址不对,只是示意可以生成一个动态的urlstring  
  3.  //抓取网页中 网释义内容  
  4.     NSString * encodedString1 = (NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)urlstring, NULL, NULL,  kCFStringEncodingUTF8 );  
  5.     NSURL *url1 = [NSURL URLWithString:encodedString1];  
  6.     NSString *retStr = [NSString stringWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];//[[NSString alloc] initWithData:data encoding:];  
  7.     NSLog(@" html = %@",retStr);  
  8.   
  9. 上述方式获取的内容时有一个弊端,当网络不是太好时,会阻塞在stringWithContentsOfURL这里,导致程序假死,(可以通过创建一个线程的方式,来获取数据,这样不好阻塞主线程),或者你可以使用第二种方式:  
  10.   
  11. 2、第二种方式:通过NSURLConnection获取//获取指定网页的内容  
[csharp]  view plain  copy
  1.  NSString *urlString= [NSStringstringWithFormat:@"http://baidu.com"];  
  2.     NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString,NULL, NULL, kCFStringEncodingUTF8 );  
  3.     NSURL *url =[NSURLURLWithString:encodedString];  
  4.     NSMutableURLRequest *req=[[NSMutableURLRequestalloc]   
  5.                               initWithURL:url   
  6.                               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData   
  7.                               timeoutInterval:30.0];  
  8.     
  9. receivedData=[[NSMutableDataalloc] initWithData:nil];//接受数据  
  10.     [req setHTTPMethod: @"POST"];  
  11.     NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:req delegate:self startImmediately:YES];  
  12.     [req release];  
  13.     [connection release];  
  14.   
  15. 在委托方法中接受数据,这种方式是异步的,不会阻塞当前线程,获取数据时,你可以做别的事情  
  16. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  
  17. //简单错误处理  
  18.     UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"出错了"message:@"网络链接异常" delegate:nilcancelButtonTitle:@"OK" otherButtonTitles:nil];  
  19.     [alert show];  
  20.     [alert release];  
  21. }  
  22.   
  23. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
  24. {  
  25.     [receivedData setLength:0];//置空数据  
  26.       
  27. }  
  28.   
  29. //接收NSData数据  
  30. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data   
  31. {  
  32.     [receivedData appendData:data];  
  33. }  
  34.   
  35. //接收完毕,显示结果  
  36. - (void)connectionDidFinishLoading:(NSURLConnection *)connection   
  37. {  
  38.     [connection cancel];  
  39.     NSString *results = [[NSStringalloc]   
  40.                          initWithBytes:[receivedDatabytes]   
  41.                          length:[receivedDatalength]   
  42.                          encoding:NSUTF8StringEncoding];// 注意数据编码方式,选中正确的编码方式,防止乱码  
  43.     [selfloadingNetDescription:results];  
  44.     [results release];  
  45. //    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"数据" message:@"下载完成" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  46. //    [alert show];  
  47. //    [alert release];  
  48. //    NSLog(@"%@",results);  
  49. }     
  50.   
  51. 其实还有一种曲折的方式来获取url对应的网页内容,就是通过webView加载对应url,  
  52.  [mWebViewloadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:encodedString]]];  
  53. 在其委托方法:  
  54. webViewDidFinishLoad中通过js来获取相应的网页内容;  
  55. 例如:NSString *allHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];  
  56. 更具体的可以参考:stringByEvaluatingJavaScriptFromString这个函数的用法  
  57.   
  58. 通过上面的方式获取到html数据后,就可以通过字符串的一些处理函数来获取自己像要的内容(当然你也可以用一些xml解析库来进行解析,此处,只简单介绍一下字符串的处理):  
  59. 简单实例://获取两个body之间的内容:htmlString为上面获取的html字符串  
  60.    NSRange range1 = [htmlString rangeOfString:@"<body>"];// 返回的location是<body>在htmlString中的起始位置,使用是注意  
  61.     NSRange range2 = [htmlString rangeOfString:@"</body>"];  
  62. if(range3.location !=NSNotFound && range3.length!=0)//简单的判断,不全,使用时注意补全  
  63.    {  
  64.         NSString* bodyString= [retStr substringWithRange:NSMakeRange(range1.location, range2.location-range1.location+range2.length)];  
  65. NSLog(@"%@"bodyString);  
  66. }  
[csharp]  view plain  copy
  1.   
[csharp]  view plain  copy
  1. 补充一些字符串常用处理函数:  
  2. 1、替换字符串  
  3.  //将数据中的“回车换行”换成网页中的回车符<br/>  
  4.     NSString *localString= [descriptionOne stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br/>"];  
  5.   
  6.  //从字符串开头一直截取到指定位置,但不包括该位置的字符  
  7. //            NSString *first =[string1 substringToIndex:range.location-1] ;   
  8. //            //从指定位置开始获取之后的所有字符(包括指定位置的字符)  
  9. //            NSString *last = [string1 substringFromIndex:range.location+1];  
  10. //            //按照所给位置,长度,任意的从字符串中截取子串  
  11. //            NSString *word  = [string1 substringWithRange:NSMakeRange(range.location-1, 1)];  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Android中,我们可以使用Html.fromHtml()方法来解析带有HTML标签的字符串,并转换为Android的格式。 要获取本地资源,可以使用以下步骤: 1. 在Android项目的assets文件夹下创建一个名为"html"的文件夹,将要加载的HTML文件放入其中。例如,我们将假设有一个名为"local.html"的HTML文件。 2. 创建一个WebView来加载并显示HTML内容。在XML布局文件中,添加一个WebView控件: ```xml <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 3. 在Java代码中,找到并设置WebView控件: ```java WebView webView = findViewById(R.id.webview); // 加载本地HTML文件 webView.loadUrl("file:///android_asset/html/local.html"); // 也可以使用字符串显示HTML内容 // webView.loadDataWithBaseURL(null, "<html><body>你好,世界!</body></html>", "text/html", "utf-8", null); ``` 上述代码中,我们使用了webView.loadUrl()方法来加载本地HTML文件。注意,方法中的URL是以"file:///android_asset/"为前缀的,这是指向项目的assets文件夹的路径。 4. 确保在AndroidManifest.xml文件中添加了Internet权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 以上就是在Android中解析获取本地资源的基本步骤。你可以根据自己的需求对WebView进行更多的定制和处理。 ### 回答2: 在Android上解析HTML获取本地资源可以通过以下几个步骤实现: 1. 首先,需要使用合适的HTML解析库,例如Jsoup。可以通过将该库添加到项目的Gradle文件中进行引入。 2. 在Android应用的assets或res目录下,将HTML文件作为本地资源嵌入到项目中。 3. 在代码中,使用Jsoup库加载并解析HTML文件。可以通过以下代码示例实现: ```java // 加载本地HTML文件 String htmlString = ""; try { InputStream inputStream = getAssets().open("local_html.html"); // 替换local_html.html为实际的HTML文件名 int size = inputStream.available(); byte[] buffer = new byte[size]; inputStream.read(buffer); inputStream.close(); htmlString = new String(buffer, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } // 解析HTML获取本地资源 Document doc = Jsoup.parse(htmlString); Elements imgElements = doc.select("img"); // 获取所有的<img>标签 for (Element img : imgElements) { String imgUrl = img.attr("src"); // 获取<img>标签的src属性值 // 可以在此处处理获取到的本地资源路径 // 例如可以通过加载本地图片资源的方式显示图片,或者获取到其他类型的本地资源文件路径等等 } ``` 通过以上步骤,就可以成功解析HTML文件并获取其中的本地资源。根据实际需求,可以进一步处理获取到的本地资源路径,并进行相应的操作。 ### 回答3: 在Android中,我们可以使用Html解析器来解析HTML代码,并获取其中的本地资源。下面是一种常用的方法: 首先,我们需要使用Html解析器类来解析HTML代码。Android提供了一个Html类,可以用于解析和处理HTML代码。我们可以使用它的fromHtml()方法将HTML代码转换为Spannable对象。 接下来,我们可以使用Spannable对象的getSpans()方法来获取Spannable对象中的本地资源。Spannable对象使用Span类来标记文本的不同样式和属性,其中包含了我们想要获取的本地资源。通过迭代Spannable对象中的Span数组,我们可以判断每个Span对象是否是我们需要的类型,并从中获取本地资源。 具体的步骤如下所示: 1. 在我们的Android项目中,导入Html类: import android.text.Html; 2. 解析HTML代码并返回Spannable对象: String htmlCode = "<img src='file:///android_res/drawable/image.png'>"; // 假设这是我们的HTML代码 Spannable spannable = (Spannable) Html.fromHtml(htmlCode); 3. 获取Spannable对象中的本地资源: ImageSpan[] imageSpans = spannable.getSpans(0, spannable.length(), ImageSpan.class); for (ImageSpan span : imageSpans) { String imagePath = span.getSource(); // 获取本地资源路径 // 执行相应的操作,比如加载图片等 } 在上述步骤中,我们首先将HTML代码转换为Spannable对象,然后使用getSpans()方法获取Spannable对象中的ImageSpan对象,通过ImageSpan对象的getSource()方法获取本地资源的路径。最后,我们可以根据路径执行相应的操作,比如加载图片等。 请注意,上述方法仅适用于获取HTML代码中的图片资源。如果想要获取其他类型的本地资源,可以相应地修改代码。 以上是在Android中解析HTML代码并获取本地资源的简要介绍。希望能对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值