• 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 
  • 相关阅读:
    codechef BIBOARD
    Tree
    NOIWC2021总结
    星际穿越
    GDKOI总结
    lg4229
    P3320 [SDOI2015]寻宝游戏
    P6670 [清华集训2016] 汽水
    P6326 Shopping
    P3060 [USACO12NOV]Balanced Trees G
  • 原文地址:https://www.cnblogs.com/forkasi/p/4827119.html
Copyright © 2020-2023  润新知