zoukankan      html  css  js  c++  java
  • hpple 简单使用

    最近项目使用到hpple,简单说一下使用方式,做做笔记

                let responseData = response as! NSData
                        let utf8Html = responseData.stringGBK().stringByReplacingOccurrencesOfString("gb2312", withString: "utf-8")
                        let doc:TFHpple = TFHpple.init(HTMLData: utf8Html.dataUsingEncoding(NSUTF8StringEncoding))
                        let eles = doc.searchWithXPathQuery("//h3/a")
                        eles.forEach({ (item:AnyObject!) -> () in
                            let ele = item as! TFHppleElement
                            if let text = ele.text(){
                                if ele.objectForKey("href").rangeOfString("notice.php") == nil {
                                    
                                    let thread = Thread()
                                    thread.text  = text
                                    thread.href = ele.objectForKey("href")
                                    print(thread.href)
                                }
                            }
                        })
    

    1.初始化数据

    从server返回来的数据是gb2312编码的文本(很蛋痛),所以必须得将其先转换成UTF编码的格式

    stringGBK的内部实现是这样的

    extension NSData{
        
        func stringGBK()->String{
            let gbkEncoding = CFStringConvertEncodingToNSStringEncoding((UInt32)(CFStringEncodings.GB_18030_2000.rawValue))
            let str = String(data: self, encoding: gbkEncoding)
            return str!
        }
        
    }
    

    在代用TFHpple的init之前,得注意header便签的meta charset 属性值,这货只认utf-8

    let utf8Html = responseData.stringGBK().stringByReplacingOccurrencesOfString("gb2312", withString: "utf-8")
    

     具体是因为hpple使用的是libxml2这个库

    http://www.xmlsoft.org/encoding.html 具体可以这看看官网的介绍

     在获取html字符串后,就可以调用hpple的初始化方法

    let doc:TFHpple = TFHpple.init(HTMLData: utf8Html.dataUsingEncoding(NSUTF8StringEncoding))
    

    2.查找dom


    我们使用类css选择器的方式,下面这句话的意思是css选择器中 h3>a

    let eles = doc.searchWithXPathQuery("//h3/a")
    

     3.获取属性

    text()获取 element.html 中的内容,text可能返回nil 

    获取属性 提供一个 

    ele.objectForKey 
  • 相关阅读:
    百奥谷
    3月13日火箭VS老鹰
    百度 hi 下载地址(内测版,正式版)
    中兴u980
    2008年清明节放假通知
    cyp740703 一个女人的自白
    黄唇鱼
    3月9日火箭vs黄蜂
    3月3日火箭vs掘金
    百度hi邀请码
  • 原文地址:https://www.cnblogs.com/forkasi/p/4827119.html
Copyright © 2011-2022 走看看