HTML-Parsing in Swift (iOS/macOS): Die Bibliothek SwiftSoup

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 Webseiten zu extrahieren. Im Gegensatz zu Python mit seinen leistungsstarken Bibliotheken BeautifulSoup und Scrapy gab es in der Welt von Swift lange Zeit kein praktisches Werkzeug zum HTML-Parsing. Die Lösung bietet die Bibliothek SwiftSoup – ein reiner Swift-Port der beliebten Java-Bibliothek Jsoup. Sie bietet eine benutzerfreundliche API für die Arbeit mit HTML-Dokumenten, die Navigation im DOM-Baum, die Suche nach Elementen mit CSS-Selektoren und die Datenextraktion.



Was ist SwiftSoup?



SwiftSoup ist eine Open-Source-Bibliothek, die das Parsen von HTML, das Extrahieren und Ändern von Daten sowie die Bereinigung von HTML von potenziell gefährlichen Elementen ermöglicht. Sie funktioniert auf allen Apple-Plattformen: iOS, macOS, tvOS, watchOS. Die wichtigsten Funktionen sind:



  • Parsen von HTML aus einem String, einer URL oder einer Datei
  • Navigation im DOM-Baum mit CSS-Selektoren
  • Extrahieren von Text, Attributen und HTML-Code von Elementen
  • Änderung des Dokuments (Hinzufügen, Entfernen, Ändern von Elementen)
  • Bereinigung von HTML vor XSS-Angriffen
  • Unterstützung aller modernen HTML-Standards


Installation von SwiftSoup



Der einfachste Weg der Installation ist über den Swift Package Manager. Fügen Sie die Abhängigkeit in der Datei Package.swift hinzu:



// swift-tools-version:5.5import PackageDescription

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


Wenn Sie Xcode verwenden, öffnen Sie das Menü File → Add Packages..., fügen Sie die Repository-URL ein und klicken Sie auf Add Package.



Basisbeispiel für HTML-Parsing



Betrachten wir ein einfaches Beispiel – das Extrahieren des Seitentitels:



import SwiftSoup

let html = "<html><head><title>PythonLib - Werkzeuge für Entwickler</title></head><body><p>Hallo, Welt!</p></body></html>"

do { let doc = try SwiftSoup.parse(html) let title = try doc.title() print("Titel: \\(title)") let bodyText = try doc.body()?.text() print("Body-Text: \\(bodyText ?? "")")} catch Exception.Error(let type, let message) { print("Fehler: \\(type) — \\(message)")} catch { print("Unbekannter Fehler")}


Ausgabe in der Konsole:

Titel: PythonLib - Werkzeuge für EntwicklerBody-Text: Hallo, Welt!


Suche nach Elementen mit CSS-Selektoren



Eine der Stärken von SwiftSoup sind die leistungsstarken Selektoren, die Webentwicklern vertraut sind. Sie können beliebige CSS-Selektoren verwenden:



let html = """<div class="articles">    <article id="post-1">        <h2 class="title">SwiftSoup Tutorial</h2>        <p class="meta">Veröffentlicht: 2024-01-15</p>        <p>Inhalt des Artikels...</p>    </article>    <article id="post-2">        <h2 class="title">HTML-Parsing in Swift</h2>        <p class="meta">Veröffentlicht: 2024-02-20</p>        <p>Noch ein Inhalt...</p>    </article></div>"""

let doc = try SwiftSoup.parse(html)

// Suche nach Klasselet titles = try doc.select(".title")for title in titles { print(try title.text())}

// Suche nach IDif let post = try doc.select("#post-1").first() { let h2 = try post.select("h2").text() let date = try post.select(".meta").text() print("Artikel: \\(h2) — \\(date)")}

// Kombinierter Selektorlet articles = try doc.select("div.articles > article")

Empfehlungen