Swift 2解析HTML并查找特定节点

时间:2015-12-28 10:06:31

标签: swift swift2

使用Kanna导入我正在使用以下代码解析html:

if let doc = Kanna.HTML(url: NSURL(string: "https://en.wikipedia.org/wiki/Data")!, encoding: NSUTF8StringEncoding) {

        // Search for nodes by XPath
        for link in doc.xpath("/html/head...") {
            primaryDisplay.text!=link.text!
            print(link.text)
        }
    }
}

我想知道如何识别html页面中/上的特定"节点"(不确定这是否是正确的术语)来解析我想要的特定数据......

这是一张图片,展示了我想知道的东西......我想......

Image

2 个答案:

答案 0 :(得分:0)

使用SwiftSoup

进行操作的简单方法

试试这个:

do{
            let html = "<!DOCTYPE html>" +
                "<html>" +
                "<head>" +
                "<title>Some webpage</title>" +
                "</head>" +
                "<body>" +
                "<p class='normal'>This is the first paragraph.</p>" +
                "<p class='special'><b>this is in bold</b></p>" +
                "</body>" +
            "</html>";

            let doc: Document = try SwiftSoup.parse(html)
            let els: Elements = try doc.getElementsByClass("special")
            let special: Element? = els.first()//get first element
            print(try special?.text())//"this is in bold"
            print(special?.tagName())//"p"
            print(special?.child(0).tag().getName())//"b"

        }catch Exception.Error(let type, let message)
        {
            print("")
        }catch{
            print("")
        }

答案 1 :(得分:0)

您还应该看看xpath / xquery-这是一种专门用于遍历和查询XML的语言,这使其适用于XHTML和HTML。 XHTML基本上是格式良好的HTML。

假设您的计算机上安装了xpath / xquery解析器,则可以...

  • 获取文档中所有p元素的列表:// p
  • 获取所有具有“特殊”类的p个元素的列表:// p [@class ='special']

XQuery添加了使用类似于SQL的称为FLWOR的语法查询文档的功能。

对于HTML使用此解析器或任何其他解析器的困难在于,通常HTML格式不正确。这意味着每个开始标签都没有结束标签。由于解析器可能无法弄清HTML所隐含的层次结构,因此任何类型的解析都有些粗略。