Разобрать 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")
}