首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SwiftSoup抓取重定向的特定网站?

如何使用SwiftSoup抓取重定向的特定网站?
EN

Stack Overflow用户
提问于 2019-06-19 02:02:27
回答 1查看 1.2K关注 0票数 4

我正在尝试让Swift抓取网站使用SwiftSoup。然而,像https://apple.news/AQZXxg8mUQfKrEaM9MRBpxw这样的网站,它会使用JavaScript自动重定向,这会导致SwiftSoup抓取打开的页面,而不是我想要的实际文章。我应该如何抓取这个链接,这样它才能抓取实际的文章,而不是重定向的封面网页?

我尝试使用状态码,但这个网站没有给出301或302的状态码,而是200的状态码。我试着抓取链接的JavaScript部分,但我不知道该怎么处理它。

EN

回答 1

Stack Overflow用户

发布于 2019-06-19 02:53:09

代码语言:javascript
复制
func redirectUrl() {

    let url = URL(string: "https://apple.news/AQZXxg8mUQfKrEaM9MRBpxw")!

    URLSession.shared.dataTask(with: url) { (data, response, error) in

        let html = String(data: data!, encoding: .utf8) ?? "none"
        self.parse(html: html)

    }.resume()


}

func parse(html: String) {

    do {

        let doc = try SwiftSoup.parse(html)
        let link: Element = try doc.select("a").first()!
        let linkHref = try link.attr("href")

        print(linkHref)
    } catch let error {
        print(error.localizedDescription)
    }

}

这将会在印刷品上

代码语言:javascript
复制
https://www.npr.org/2019/06/18/733401736/npr-identifies-fourth-attacker-in-civil-rights-era-cold-case

这将适用于重定向url。

代码语言:javascript
复制
func redirectLink(url: URL, completion: @escaping (URL?) -> Void) {

    var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 15.0)
    request.httpMethod = "HEAD"

    URLSession.shared.dataTask(with: request) { (data, response, error) in

        if let response = response {
            completion(response.url)
        }

    }.resume()

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56654708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档