Parsing in Swift: Erstellen Sie einen Daten-Parser in 30 Minuten

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

Warum Swift die ideale Sprache fürs Parsing ist, über die niemand spricht

\n\n

Wenn es um das Sammeln von Daten aus dem Internet geht, denken alle sofort an Python mit seinem BeautifulSoup und Scrapy. Aber was, wenn ich Ihnen sage, dass Swift, die Sprache, die Sie für iOS-Apps verwenden, genauso viel kann? Ja, Sie haben richtig gehört. Parsing in Swift ist nicht nur eine exotische Spielerei, sondern ein leistungsstarkes Werkzeug, das bei gleichen Aufgaben 2-3 Mal schneller arbeiten kann als Python. Und das werden wir heute beweisen.

\n\n

In diesem Artikel erfahren Sie, wie Sie die Umgebung einrichten, Ihren ersten Parser in Swift schreiben, Fehler behandeln und Daten speichern. Wir werden keine komplexen Abstraktionen verwenden – nur sauberen, verständlichen Code, den Sie bereits in 15 Minuten ausführen können.

\n\n

Was ist Parsing und Scraping in Swift?

\n\n

Swift-Parsing ist der Prozess des Extrahierens strukturierter Daten aus Webseiten oder Dokumenten unter Verwendung der Programmiersprache Swift. Im Gegensatz zum klassischen Web-Scraping in Python bietet Swift eine native Integration mit iOS/macOS, was es ideal für die Erstellung von Apps macht, die selbstständig Daten sammeln.

\n\n

Die wichtigsten Anwendungsszenarien für Swift-Datenscraping sind:

\n
    \n
  • Sammeln von Preisen aus Online-Shops zur Wettbewerbsüberwachung
  • \n
  • Extrahieren von Kontaktdaten aus Verzeichnis-Websites
  • \n
  • Analyse von Nachrichtenfeeds und Blogs
  • \n
  • Erstellung eigener APIs für Apps (wenn keine offizielle API vorhanden ist)
  • \n
\n\n

Für das Parsing in Swift verwenden wir zwei Schlüsseltechnologien: URLSession zum Herunterladen von HTML-Seiten und die Bibliothek SwiftSoup zum Parsen von HTML-Dokumenten. SwiftSoup ist das Gegenstück zu Pythons BeautifulSoup, jedoch in reinem Swift geschrieben.

\n\n

Installation und Einrichtung des Projekts

\n\n

Zunächst müssen wir SwiftSoup installieren. Am einfachsten geht das über den Swift Package Manager. Erstellen Sie ein neues Projekt oder öffnen Sie ein bestehendes in Xcode und fügen Sie dann die Abhängigkeit hinzu:

\n\n
// In Package.swift\ndependencies: [\n    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")\n]
\n\n

Oder, wenn Sie ohne Xcode über SPM arbeiten, fügen Sie einfach die obige Zeile in Ihre Package.swift ein.

\n\n

Eine alternative Methode ist die Verwendung von CocoaPods:

\n
pod 'SwiftSoup', '~> 2.6.0'
\n\n

Nach der Installation importieren Sie die Bibliothek in Ihren Code:

\n
import SwiftSoup\nimport Foundation
\n\n

Fertig! Jetzt können wir mit dem Schreiben des Parsers beginnen.

\n\n

Schreiben unseres ersten Parsers in Swift: Schritt für Schritt

\n\n

Lassen Sie uns einen Parser schreiben, der die Artikelüberschriften von der Startseite von Hacker News (news.ycombinator.com) extrahiert. Dies ist eine klassische Aufgabe zum Erlernen des Parsings.

\n\n

Schritt 1: Herunterladen der HTML-Seite

\n\n

Wir verwenden URLSession zum asynchronen Herunterladen der Daten. Swift ist eine Sprache mit starker Unterstützung für async/await, daher verwenden wir den modernen Ansatz.

\n\n
func fetchHTML(from urlString: String) async throws -> String {\n    guard let url = URL(string: urlString) else {\n        throw URLError(.badURL)\n    }\n    \n    let (data, _) = try await URLSession.shared.data(from: url)\n    guard let html = String(data: data, encoding: .utf8) else {\n        throw URLError(.cannotDecodeContentData)\n    }\n    \n    return html\n}
\n\n

Beachten Sie: Wir geben einen HTML-String zurück. Dies sind die Rohdaten, die wir parsen werden.

\n\n

Schritt 2: HTML-Parsing mit SwiftSoup

\n\n

Jetzt kommt der spannende Teil – die Datenextraktion. SwiftSoup arbeitet wie CSS-Selektoren: Sie geben an, welche Elemente Sie abrufen möchten.

\n\n
func parseTitles(from html: String) throws -> [String] {\n    let doc = try SwiftSoup.parse(html)\n    let titles = try doc.select(".titleline a").array()\n    \n    var result: [String] = []\n    for title in titles {\n        let text = try title.text()\n                

Blogs

Buchempfehlungen