Разобрать HTML с помощью Swiftsoup (Swift)?

Я пытаюсь проанализировать некоторые сайты с помощью Swiftsoup, скажем, один из сайтов от Medium. Как я могу извлечь тело сайта и загрузить тело в другой UIViewController, как это делает Instapaper?

введите описание изображения здесь

Вот код, который я использую для извлечения заголовка:

import SwiftSoup

class WebViewController: UIViewController, UIWebViewDelegate {

...

override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://medium.com/@timjwise/stop-lying-to-yourself-when-you-snub-panhandlers-its-not-for-their-own-good-199d0aa7a513")
        let request = URLRequest(url: url!)
        webView.loadRequest(request)

        guard let myURL = url else {
        print("Error: \(String(describing: url)) doesn't seem to be a valid URL")
            return
        }
        let html = try! String(contentsOf: myURL, encoding: .utf8)

        do {
            let doc: Document = try SwiftSoup.parseBodyFragment(html)
            let headerTitle = try doc.title()
            print("Header title: \(headerTitle)")
        } catch Exception.Error(let type, let message) {
            print("Message: \(message)")
        } catch {
            print("error")
        }

}

}

Но мне не повезло извлечь тело сайта или любые другие сайты, есть ли способ заставить его работать? CSS или JavaScript (я ничего не знаю о CSS или Javascript)?

1 ответ

Используйте тело функции https://github.com/scinfu/SwiftSoup Попробуйте это:

let html = try! String(contentsOf: myURL, encoding: .utf8)

    do {
        let doc: Document = try SwiftSoup.parseBodyFragment(html)
        let headerTitle = try doc.title()

        // my body
        let body = doc.body()
        // elements to remove, in this case images
        let undesiredElements: Elements? = try body?.select("img[src]")
        //remove
        undesiredElements?.remove()


        print("Header title: \(headerTitle)")
    } catch Exception.Error(let type, let message) {
        print("Message: \(message)")
    } catch {
        print("error")
    }
Другие вопросы по тегам