HTML-Parsing in Swift: Die Bibliothek SwiftSoup für iOS/macOS

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTML-Parsing in Swift (iOS/macOS) mit SwiftSoup



Bei der Entwicklung von Apps für iOS und macOS besteht häufig die Notwendigkeit, Daten aus HTML-Seiten zu extrahieren. Ob es sich um das Parsen einer Nachrichtenseite, das Abrufen von Wechselkursen oder die Analyse von Webinhalten handelt – ohne ein zuverlässiges Werkzeug geht es nicht. In der Swift-Welt ist die Bibliothek SwiftSoup der De-facto-Standard – ein reiner Swift-Port des beliebten Java-Parsers Jsoup.



SwiftSoup bietet eine praktische API zum Laden, Parsen und Manipulieren von HTML-Dokumenten unter Verwendung von CSS-Selektoren und DOM-Traversierungsmethoden. Die Bibliothek ist vollständig in Swift geschrieben, hat keine externen Abhängigkeiten und unterstützt alle Apple-Plattformen: iOS (ab 11.0), macOS (10.13+), watchOS und tvOS.



Installation von SwiftSoup über den Swift Package Manager



Fügen Sie die Abhängigkeit in Ihrer Package.swift oder über das Xcode-Menü hinzu: File → Add Packages...



// Package.swiftdependencies: [    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")],targets: [    .target(        name: "YourTarget",        dependencies: ["SwiftSoup"])]

// Oder in Xcode: https://github.com/scinfu/SwiftSoup.git, Version 2.6.0


Nach der Installation importieren Sie die Bibliothek in die gewünschte Datei:



import SwiftSoup


Basis-Parsing eines HTML-Strings



Der einfachste Weg, um zu beginnen, ist das Parsen eines HTML-Strings, der z. B. von URLSession stammt:



let html = """<html>    <body>        <h1>Hallo, Welt!</h1>        <p class="content">Dies ist Text innerhalb eines Absatzes</p>        <a href="https://example.com">Link</a>    </body></html>"""

do { let doc: Document = try SwiftSoup.parse(html) let title = try doc.title() let paragraph = try doc.select("p.content").first()?.text() let link = try doc.select("a").first()?.attr("href") print("Titel: \\(title)") print("Absatz: \\(paragraph ?? "nicht gefunden")") print("Link: \\(link ?? "nicht gefunden")")} catch { print("Parsing-Fehler: \\(error)")}


Laden und Parsen von HTML aus dem Netzwerk



Häufig wird HTML über HTTP bezogen. Hier ist ein Beispiel zum Laden einer Seite und Extrahieren von Daten:



import Foundationimport SwiftSoup

func fetchAndParse(urlString: String) async { guard let url = URL(string: urlString) else { return } do { let (data, _) = try await URLSession.shared.data(from: url) guard let html = String(data: data, encoding: .utf8) else { return } let doc = try SwiftSoup.parse(html) // Alle Links extrahieren let links = try doc.select("a[href]") for link in links { let href = try link.attr("href") let text = try link.text() print("\\(text) -> \\(href)") } // h2-Überschriften extrahieren let headings = try doc.select("h2") for heading in headings { print("Überschrift: \\(try heading.text())") } } catch { print("Fehler: \\(error)") }}

// VerwendungTask { await fetchAndParse(urlString: "https://example.com")}


Arbeiten mit CSS-Selektoren



SwiftSoup unterstützt praktisch alle standardmäßigen CSS-Selektoren, was die Suche nach Elementen intuitiv macht:



  • tag — nach Tag-Namen: try doc.select("div")
  • #id — nach ID: try doc.select("#main-content")
  • .class — nach Klasse: try doc.select(".article-title")
  • [attribute] — nach Attribut: try doc.select("[data-id]")
  • parent > child — direktes Kind: try doc.select("ul > li")
  • el:contains(t

Empfehlungen