使用Swift获取网站数据

时间:2015-05-06 07:13:21

标签: ios swift web-scraping nsurlsession

我正在尝试使用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

3 个答案:

答案 0 :(得分:7)

这是一个有效的完整示例

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

答案 1 :(得分:2)

这不是解决此问题的最佳方法,但上述答案在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()
    }

答案 2 :(得分:0)

应该是这样的:

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()
}