苹果 swift 3 中的网页抓取

Joh*_*ohn 4 swift-playground swift3

我是一名 Swift 初学者,我正试图弄清楚如何从网络文章中检索文本、创建一个新的文本文件并将文本数据保存到其中(使用 Swift Playgrounds)。这可能吗?

关于这个主题,我在网上唯一能找到的就是这个,我认为它甚至不是为 Swift 3 编写的:

PS 如果我的问题需要更多详细信息,请告诉我而不是搁置。谢谢!

import Cocoa

var url = NSURL(string: "http://finance.yahoo.com/news/tv-news-ces-2017-120931816.html")

if url != nil {

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in

        print(data)

        if error == nil {

            var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as NSString!

            print(urlContent)
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 5

那是 Swift 2.3。在 Swift 3 中使用URL而不是NSURL和使用URLSession而不是NSURLSession等。你也可以使用String而不是NSString。例如

let url = URL(string: "http://finance.yahoo.com/news/tv-news-ces-2017-120931816.html")!

let task = URLSession.shared.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("\(error)")
        return
    }

    let string = String(data: data, encoding: .utf8)

    print("\(string)")
}

task.resume()
Run Code Online (Sandbox Code Playgroud)

如果您打算在操场上执行此操作,请记住这是异步运行的,因此您需要设置needsIndefiniteExecution.

import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true
Run Code Online (Sandbox Code Playgroud)

要真正解析 HTML,您应该考虑使用 HTML 解析器,如TFHpple(用 Objective-C 编写,但在 Swift 中仍然可以很好地工作)或NDHpple(Swift 版本,我没有 TFHpple 那样自信,但是可能会正常工作)。

您可能想查看如何在 iOS 上解析 HTML。它已经过时,但会引导您了解概念(确保您没有违反网站的服务条款、如何使用解析器等)。


如果要将其保存到文件中,可以执行以下操作:

let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    .appendingPathComponent("test.dat")
try! data.write(to: fileURL)
Run Code Online (Sandbox Code Playgroud)

您可以使用任何您想要的文件扩展名。