zoukankan      html  css  js  c++  java
  • iOS

    一、前言:

      最近有个需求就是需要客户端来解析小说网站的内容,所以对这块进行了一些了解,发现这块的资料还是蛮少的。

      基本上都是使用  libxml2   这个东西来做解析,但是这东西的资料也蛮少的,基本上都是用  HPPLE  这个库,这个库是基于   libxml2  封装的一个OC库,地址奉上  https://github.com/topfunky/hpple

      简单集成下吧。

    二、集成

      1、导入文件

        把下载下来的项目这个class目录下面的文件导入进来

      2、配置属性

        2.1、 libxml2.2.dylib  导入framework

        2.2 、PROJECT 中的 Search Path - header search paths添加 /usr/include/libxml2

      3、封装工具类,使用

        直接上代码吧

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface HppleManger : NSObject
    
    + (instancetype)sharedHppleMark;
    
    /// 获取解析结果
    /// @param htmlStr 网页地址
    /// @param subStr 网页解析规则
    - (void)getListWithHTML:(NSString *)htmlStr andSubscri:(NSString *)subStr;
    
    @end
    
    NS_ASSUME_NONNULL_END
    #import "HppleManger.h"
    #import "TFHpple.h"
    
    @implementation HppleManger
    
    static HppleManger *_showWaterMark = nil;
    
    + (instancetype)sharedHppleMark{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _showWaterMark = [[super allocWithZone:NULL] init];
        });
        
        return _showWaterMark;
    }
    
    + (id)allocWithZone:(struct _NSZone *)zone {
        return [HppleManger sharedHppleMark];
    }
      
    - (id)copyWithZone:(struct _NSZone *)zone {
        return [HppleManger sharedHppleMark];
    }
    
    - (void)getListWithHTML:(NSString *)htmlStr andSubscri:(NSString *)subStr {
        NSData  * data      = [NSData dataWithContentsOfFile:htmlStr];
        
        TFHpple * doc       = [[TFHpple alloc] initWithHTMLData:data];
        //a[@class='sponsor']
        NSArray * elements  = [doc searchWithXPathQuery:subStr];
        if (elements.count == 0) {
            return;
        }
    
        TFHppleElement *element = [elements objectAtIndex:0];
        [element text];                       // The text inside the HTML element (the content of the first text node)
        [element tagName];                    // "a"
        [element attributes];                 // NSDictionary of href, class, id, etc.
        [element objectForKey:@"href"];       // Easy access to single attribute
        [element firstChildWithTagName:@"b"]; // The first "b" child node
        NSLog(@"text:%@",[element text]);
        NSLog(@"tagName:%@",[element tagName]);
        NSLog(@"content:%@" , [element content]);
        
    }

      使用:

    NSString *htmlString  = @"<br>&nbsp;&nbsp;&nbsp;&nbsp;全本小说网 最快更新你的灵兽看起来很好吃最新章节!<br /><br />";
        NSString *htmlSub = @"//br";
        [[HppleManger sharedHppleMark] getListWithHTML:htmlString andSubscri:htmlSub];

    三、总结

      这个解析要传的规则字符串暂时还没有弄的太清楚,解析失败率也高,经常解析不出来,速度还行,不过没有使用复杂的网页来做。

      下一步想直接传一个网址进来直接解析看看效果。

      下次再弄这个吧,好累,睡觉去了。

  • 相关阅读:
    查看客户端的IP地址,机器名,MAC地址,登陆名等信息
    查看sqlserver 2008中性能低下的语句
    搜索包含指定关键字的存储过程
    获得客户端详细信息以及每个进程的sql语句
    实战:sqlserver 日常检查脚本
    NIO的学习总结
    JavaWEB过滤器和监听器技术
    抽象工厂模式代码:
    详解 equals() 方法和 hashCode() 方法
    net.sf.json JSONObject与JSONArray使用实例
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/12008133.html
Copyright © 2011-2022 走看看