使用 Swift 获取网站数据

Get Website Data Using Swift

我正在尝试使用 NSURLSession 从 espn 中提取一些数据,但我似乎无法让它工作。它只打印 nil.

我已经用他们网站上的另一个页面测试了这个方法并且它有效,但我无法让它与代码中的那个一起工作。这是有问题的代码:

var url = NSURL(string: "http://espn.go.com/golf/leaderboard?tournamentId=2271")

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)

我也尝试过更改编码类型,但也没有用。它打印的数据看起来像是 UTF 8 格式,所以我认为这行不通,但我觉得我应该试试。

我觉得我 运行 没有工作的想法。

编辑: 应该指定更多,print(data) 打印出我期望的编码数据,但 print(urlContent) 打印出 nil

这是有效的完整示例

var url = NSURL(string: "http://espn.go.com/golf/leaderboard?tournamentId=2271")

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: NSASCIIStringEncoding) as NSString!

            print(urlContent)
        }
    })
    task.resume()
}

看起来这里的正确编码是 NSASCIIStringEncoding 而不是 NSUTF8StringEncoding

它应该是这样工作的:

var url = NSURL(string: "http://espn.go.com/golf/leaderboard?tournamentId=2271")

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

        if error == nil {

            var urlContent = NSString(data: NSData!, encoding: Uint)

            print(urlContent)
        }
    })
    task.resume()
}

这不是解决此问题的最佳方法,但上述答案在 swift 3 中不起作用,所以我使用了这个。

    let url = NSURL(string: "http://espn.go.com/golf/leaderboard?tournamentId=2271")

    if url != nil {
        let task = URLSession.shared.dataTask(with: url! as URL, completionHandler: { (data, response, error) -> Void in
            print(data as Any)

            if error == nil {

                let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) as NSString!

                print(urlContent as Any)
            }
        })
        task.resume()
    }