Parsing HTML en Swift (iOS/macOS) avec SwiftSoup
Lors du développement d'applications pour iOS et macOS, il est souvent nécessaire d'extraire des données de pages web. Contrairement à Python avec ses puissantes bibliothèques BeautifulSoup et Scrapy, le monde Swift a longtemps manqué d'un outil pratique pour le parsing HTML. La solution est venue avec la bibliothèque SwiftSoup — un port pur Swift de la célèbre bibliothèque Java Jsoup. Elle offre une API pratique pour travailler avec des documents HTML, naviguer dans l'arbre DOM, rechercher des éléments par sélecteurs CSS et extraire des données.
Qu'est-ce que SwiftSoup ?
SwiftSoup est une bibliothèque open source qui permet de parser du HTML, d'extraire et de modifier des données, ainsi que de nettoyer le HTML des éléments potentiellement dangereux. Elle fonctionne sur toutes les plateformes Apple : iOS, macOS, tvOS, watchOS. Principales fonctionnalités :
- Parsing HTML à partir d'une chaîne, d'une URL ou d'un fichier
- Navigation dans l'arbre DOM à l'aide de sélecteurs CSS
- Extraction de texte, d'attributs et de code HTML des éléments
- Modification du document (ajout, suppression, modification d'éléments)
- Nettoyage du HTML contre les attaques XSS
- Prise en charge de toutes les normes HTML modernes
Installation de SwiftSoup
La méthode d'installation la plus simple est via Swift Package Manager. Ajoutez la dépendance dans le fichier Package.swift :
// 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"]) ])Si vous utilisez Xcode, ouvrez le menu File → Add Packages..., collez l'URL du dépôt et cliquez sur Add Package.
Exemple de base de parsing HTML
Considérons un exemple très simple — l'extraction du titre d'une page :
import SwiftSoup
let html = "<html><head><title>PythonLib - outils pour développeurs</title></head><body><p>Bonjour, le monde !</p></body></html>"
do { let doc = try SwiftSoup.parse(html) let title = try doc.title() print("Titre : \\(title)") let bodyText = try doc.body()?.text() print("Texte du body : \\(bodyText ?? "")")} catch Exception.Error(let type, let message) { print("Erreur : \\(type) — \\(message)")} catch { print("Erreur inconnue")}Sortie console :
Titre : PythonLib - outils pour développeursTexte du body : Bonjour, le monde !Recherche d'éléments avec des sélecteurs CSS
L'un des points forts de SwiftSoup réside dans ses puissants sélecteurs, familiers aux développeurs web. Vous pouvez utiliser n'importe quel sélecteur CSS :
let html = """<div class="articles"> <article id="post-1"> <h2 class="title">Tutoriel SwiftSoup</h2> <p class="meta">Publié le : 2024-01-15</p> <p>Contenu de l'article...</p> </article> <article id="post-2"> <h2 class="title">Parsing HTML en Swift</h2> <p class="meta">Publié le : 2024-02-20</p> <p>Encore un contenu...</p> </article></div>"""
let doc = try SwiftSoup.parse(html)
// Recherche par classelet titles = try doc.select(".title")for title in titles { print(try title.text())}
// Recherche par IDif let post = try doc.select("#post-1").first() { let h2 = try post.select("h2").text() let date = try post.select(".meta").text() print("Article : \\(h2) — \\(date)")}
// Sélecteur combinélet articles = try doc.select("div.articles > article") Aussi dans la bibliothèque
Travailler avec Kafka en TypeScript : la bibliothèque KafkaJS pour Node.js
Burn Rust : guide complet avec exemples pratiques
Client HTTP pour JavaScript (Node.js) : top bibliothèques 2025
Guide complet gRPC Java : tutoriel avec exemples
Configuration des applications C++ : bibliothèques et approches