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 
posted @ 2015-09-21 19:57  睡后3k  阅读(370)  评论(0编辑  收藏  举报