XPath表达式不会导致相同的结果

时间:2015-08-04 19:44:43

标签: parsing xpath

我在Swift中使用xpath-parser解析一个网站。该网站有多个页面具有相同的布局。

The website.

xpath就是这样:

//div[@class='views-row views-row-4 views-row-even']/div[@class='details']/div[@class='detailscontainer']//tr[7]/td[2]

它几乎适用于每个页面上的每个元素,但突然之间,xpath不会返回它应该的值。

我已经检查了带有chrome扩展名的xpath并且它是正确的。但是解析器找不到它。

例如,在this page它的体育馆Laufen'其中' Typ' row doesn&t; t(tr [7] / td 2)返回任何值(null-crash),但它应该,因为它与其他记录相同。

可疑也是,之前有些行正在运行。例如前4个。但更高的行通常不起作用。

我使用Kanna作为解析器。这是我的代码:

for site in 15...49{


        var url = "https://bildungssystem.educa.ch/de/schools_in_ch?page=2%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C" + site.description + "&title=&field_eduinst_canton_value=All&field_eduinst_type_value=All&field_eduinst_school_grade_value=All&ahah_page_storage[page_build_id]=page-72cd2d0cc7ac814bba6bbfb0b0bc0a3e"
        var urlRequest = NSURL(string: url)

        var error:NSError?

        let html = String(contentsOfURL: urlRequest!, encoding: NSUTF8StringEncoding, error: &error)

        if let doc = Kanna.HTML(html: html!, encoding: NSUTF8StringEncoding) {
            println(doc.title)

            for school in 1...25{
                if school == 22 && site == 49{
                    break
                }

                for td in 1...7{
                   println(doc.xpath("//div[@class='view-content']/div[starts-with(@class, 'views-row views-row-" + school.description + "')]/div[@class='details']/div[@class='detailscontainer']//tr[" + td.description + "]/td[2]")[0].text)
                }

            }
            println("SITE \(site) DONE")
        }


    }

1 个答案:

答案 0 :(得分:0)

您尝试查询的内容可能会动态加载(通过JavaScript),因此在HTML最初呈现时无法使用。 Chrome扩展程序的工作原因可能是因为Chrome正在执行构建DOM所需的JavaScript。但是,当您使用Kanna和NSURLSession时,它们不是用于评估JS的JavaScript引擎。