HTML-Parsing in Swift (iOS/macOS): Übersicht über die Bibliotheken SwiftSoup und Fuzi
Bei der Entwicklung von Anwendungen für iOS und macOS besteht häufig die Notwendigkeit, Daten aus Webseiten zu extrahieren. HTML-Parsing ermöglicht es, Inhalte automatisch zu erfassen, zu strukturieren und in der Anwendung zu nutzen. Im Swift-Ökosystem gibt es für diese Zwecke mehrere leistungsstarke Bibliotheken. In diesem Artikel betrachten wir im Detail die beiden beliebtesten: SwiftSoup und Fuzi. Sie erfahren, wie Sie sie installieren, grundlegende Parsing-Operationen durchführen und welche Besonderheiten jede von ihnen hat.
Wozu braucht man HTML-Parsing in Swift?
HTML-Parsing ist in folgenden Szenarien nützlich:
- Datenaggregation — Sammeln von Nachrichten, Preisen, Produktbeschreibungen von mehreren Websites.
- Änderungsüberwachung — Verfolgen von Aktualisierungen auf Zielseiten.
- Integration mit Webdiensten — Wenn die Website keine API bereitstellt, ist Parsing die einzige Möglichkeit, Daten zu erhalten.
- Testautomatisierung — Überprüfung der Korrektheit der HTML-Struktur.
Die Bibliothek SwiftSoup
SwiftSoup ist ein Swift-Port der beliebten Java-Bibliothek Jsoup. Sie bietet eine benutzerfreundliche API zum Parsen, Navigieren und Manipulieren von HTML-Dokumenten. SwiftSoup unterstützt CSS-Selektoren, was die Extraktion von Elementen einfach und intuitiv macht.
Installation von SwiftSoup
Fügen Sie die Abhängigkeit in Ihre Package.swift oder über den Swift Package Manager in Xcode hinzu:
// Package.swiftdependencies: [ .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")]Beispiel zur Verwendung von SwiftSoup
Betrachten wir ein einfaches Beispiel: Wir laden einen HTML-String und extrahieren die Überschriften <h2> und Links <a>.
import SwiftSoup
func parseHTML() { let html = """ <html> <body> <h2>Artikelüberschrift</h2> <p>Absatztext.</p> <a href="https://example.com">Link</a> </body> </html> """ do { let doc = try SwiftSoup.parse(html) // Alle h2-Überschriften extrahieren let headers = try doc.select("h2") for header in headers { print("Überschrift: \\(try header.text())") } // Alle Links extrahieren let links = try doc.select("a[href]") for link in links { let linkText = try link.text() let linkHref = try link.attr("href") print("Text: \\(linkText), URL: \\(linkHref)") } } catch { print("Parsing-Fehler: \\(error)") }}In diesem Beispiel verwenden wir die Methode select() mit dem CSS-Selektor "h2", um alle Überschriften der zweiten Ebene auszuwählen, und "a[href]" — um alle Links mit dem Attribut href auszuwählen. Die Methode text() gibt den Textinhalt des Elements zurück, und attr() den Wert des angegebenen Attributs.
Navigation im Dokumentbaum
SwiftSoup ermöglicht die Navigation im DOM-Baum:
// Das erste h2-Element abrufenif let firstHeader = try doc.select("h2").first() { print("Erste Überschrift: \\(try firstHeader.text())")}
// Das übergeordnete Element abrufenlet parent = try firstHeader.parent()print("Elternelement: \\(try parent?.tagName() ?? "nil")")
// Das nächste benachbarte Element abrufenlet nextSibling = try firstHeader.nextElementSibling()print("Nächstes Element: \\(try nextSibling?.tagName() ?? "nil")")Die Bibliothek Fuzi
Fuzi ist eine weitere beliebte Bibliothek zum Parsen von HTML und XML in Swift. Sie basiert auf libxml2 und zeichnet sich durch hohe Leistung aus. Fuzi unterstützt ebenfalls CSS-Selektoren und XPath-Abfragen.
Auch in der Bibliothek
JSON-Verarbeitung in C# (.NET): Vollständiger Leitfaden zu Newtonsoft.Json und System.Text.Json
PHP-DI für PHP: Komplettguide mit Beispielen
Maschinelles Lernen mit Swift: Bibliotheken für iOS/macOS
Bildverarbeitung in Node.js: resize und crop mit Sharp
Arbeiten mit Excel in Swift: Vollständiger Leitfaden zu Bibliotheken und Tools für iOS/macOS