我正在开发iOS应用程序,我需要在其中检索信息,更具体地说是"安排信息"。本网站不提供API。我不知道如何处理这个问题,并希望得到关于如何做到这一点的建议或指导。我看过解析HTML,但我不确定这是不是最好的方法,甚至知道从哪里开始。
有什么特别的方法吗?
答案 0 :(得分:0)
毋庸置疑,您应该查看网站的服务条款。他们中的许多人明确禁止ToS禁止这种做法。就个人而言,我建议您联系相关网站,看看他们是否有已发布的API,如果是,请使用该网站。与尝试编写从站点解析HTML的代码相比,它会更容易,更健壮。即使他们没有已发布的API,您也可以让他们参与有关他们建议您如何与他们进行交互的对话。
但是,在回答您的问题时,谷歌HTML解析器,例如TFHpple或NDHpple。尽管它是用Objective-C编写的,但我个人更喜欢TFHpple,即使是来自Swift。有关如何使用它的介绍,请参阅http://www.raywenderlich.com/14172/how-to-parse-html-on-ios。这显示了如何从Objective-C中使用它,但是Swift中的过程类似。
这个过程基本上是:
将六个TFHpple .m
和.h
文件复制到您的项目中。
当系统提示您创建桥接标头时,请执行此操作,然后将以下行添加到该桥接标头文件中:
#import "TFHpple.h"
如该教程中所述,请务必将$(SDKROOT)/usr/include/libxml
添加到您的"标题搜索路径"。同时将libxml2
库添加到您的库列表中,以包含在"构建阶段"您的目标设置。
但在那时,这个过程很像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()
}