Как я могу использовать SwiftSoup, чтобы очистить определенный веб-сайт, который перенаправляет? - PullRequest
3 голосов
/ 18 июня 2019

Я пытаюсь заставить Swift очищать сайты с помощью SwiftSoup. Однако на таких веб-сайтах, как: https://apple.news/AQZXxg8mUQfKrEaM9MRBpxw, он автоматически перенаправляется с помощью JavaScript, что заставляет SwiftSoup соскрести начальную страницу вместо самой статьи, которую я хочу. Как мне почистить эту ссылку, чтобы она очищала реальную статью, а не обложку, которая перенаправляет?

Я пытался использовать код состояния, но этот конкретный веб-сайт не дает код состояния 301 или 302, а дает код состояния 200. Я пытался очистить часть HTML-кода ссылки на JavaScript, но не могу точно знаю, что с этим делать.

1 Ответ

1 голос
/ 18 июня 2019
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)
    }

}

Это будет в печати

https://www.npr.org/2019/06/18/733401736/npr-identifies-fourth-attacker-in-civil-rights-era-cold-case

Это будет работать для URL перенаправления

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...