iOS 开发列车编程艺术iOS日常知识储备

HTML解析之Gumbom(iOS)

2016-04-23  本文已影响3581人  sixleaves

1.前言

好了看过了效果图, 准备进入正题了.

2.攻欲善其固,必先利其器

我主要从以下方面进行介绍

2.1 框架工具的选择

2.2 原理的介绍

这里主要简单的介绍一下, DOM的模型.DOM模型是网页中的一个概念.简单来说即所有的网页其在内存中的数据都是通过一颗树的数据结构组织起来.

<!DOCTYPE html>
<html>
  <head lang="en">    
    <meta charset="UTF-8">    
    <title>Just a test</title>    
  </head>
  <body>
        body tag!!!
  </body>        
</html>
3.png

2.3 实例(Talk is Cheap, show me the code)

介绍了基本的原理,其实网页解析抓取数据, 也就是解析DOM, 拿到想要的节点里的数据.就以下厨房的某个网页为例子来简单介绍一下OCGumbom框架的使用.
使用步骤:

在PCH文件中直接导入该框架, 或者要用的地方再导入.


Snip20160423_2.png
NSError *error = nil;
NSURL *xcfURL = [NSURL URLWithString:url];
NSString *htmlString = [NSString stringWithContentsOfURL:xcfURL encoding:NSUTF8StringEncoding error:&error];
OCGumboDocument *document = [[OCGumboDocument alloc] initWithHTMLString:htmlString];

其中的url即是网页的地址, 是一个字符串对象.
可以看到其是先将网页转为字符串, 然后根据字符串创建文档对象.这样, 我们就可以通过该文档对象进行网页的解析.

OCGumboElement *element = document.Query(@"body").find(@".block").find(@".cover").find(@"img").first();
NSLog(@"src = %@", element.attr(@"src'"));
**注意**: 这就是主要的三种常用方法.需要注意的是, 我们拿到节点之后, 我们要进行判断, 判断该节点是否是nil, 因为很可能抓取的网页结构变了, 如果不进行判断, 直接**节点元素对象**的相应方法或者是都会导致程序崩溃.上面举的三个例子, 是为了方便, 实际项目代码中, **务必每次取到节点或者节点集合, 都加一层判断, 看是不是有自己想拿的元素, 有再去调用相应的方法**

顺便提供下OCGumbo框架公开出的接口如下图.
![Snip20160423_7.png](http:https://img.haomeiwen.com/i570808/d0b51381faa99fba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

由于不可能提供完整的项目代码, 这是基本的职业道德, 为了能与大家交流.gumbom-parse我已经编译好, 可以导入工程直接使用,支持模拟器和真机调试.

2.4 待改进

虽然OCGumbom框架已经很好用了, 当考虑到和安卓端的统一, 所以实际项目中, 可以对其进行二次封装.如果安卓端的框架提供的API和标准的JS, DOM原生的API一致, 那么二次封装就可以节省iOS端很多的开发时间, 只要安卓端的解析一做完, 几乎拿过来可以快速移植.

3.后续

接下去我会分析该框架的源码与大家分享!敬请关注.链式编程实践DOM底层剖析
and~会保持每天一篇博客的更新.

上一篇 下一篇

猜你喜欢

热点阅读