如何从不提供API的网站获取数据?迅速

时间:2016-01-18 04:55:43

标签: html swift

我正在开发iOS应用程序,我需要在其中检索信息,更具体地说是"安排信息"。本网站不提供API。我不知道如何处理这个问题,并希望得到关于如何做到这一点的建议或指导。我看过解析HTML,但我不确定这是不是最好的方法,甚至知道从哪里开始。

有什么特别的方法吗?

1 个答案:

答案 0 :(得分:0)

毋庸置疑,您应该查看网站的服务条款。他们中的许多人明确禁止ToS禁止这种做法。就个人而言,我建议您联系相关网站,看看他们是否有已发布的API,如果是,请使用该网站。与尝试编写从站点解析HTML的代码相比,它会更容易,更健壮。即使他们没有已发布的API,您也可以让他们参与有关他们建议您如何与他们进行交互的对话。

但是,在回答您的问题时,谷歌HTML解析器,例如TFHppleNDHpple。尽管它是用Objective-C编写的,但我个人更喜欢TFHpple,即使是来自Swift。有关如何使用它的介绍,请参阅http://www.raywenderlich.com/14172/how-to-parse-html-on-ios。这显示了如何从Objective-C中使用它,但是Swift中的过程类似。

这个过程基本上是:

  1. 将六个TFHpple .m.h文件复制到您的项目中。

  2. 当系统提示您创建桥接标头时,请执行此操作,然后将以下行添加到该桥接标头文件中:

    #import "TFHpple.h"
    
  3. 如该教程中所述,请务必将$(SDKROOT)/usr/include/libxml添加到您的"标题搜索路径"。同时将libxml2库添加到您的库列表中,以包含在"构建阶段"您的目标设置。

  4. 但在那时,这个过程很像Wenderlich教程中描述的那个过程。例如,如果我想在Stack Overflow站点的第一页上列出问题标题,您可以这样做:

    func retrieveAndParse() {
        let url = NSURL(string: "http://stackoverflow.com")!
    
        let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
            guard error == nil && data != nil else {
                print(error)
                return
            }
    
            let hpple = TFHpple(HTMLData: data!)
            let xpathSearchString = "//div[@class='summary']/h3/a"
            if let nodes = hpple.searchWithXPathQuery(xpathSearchString) as? [TFHppleElement] {
                for node in nodes {
                    print("content = '\(node.firstChild.content)'")
                }
            }
        }
        task.resume()
    }