Parsing HTML en Swift (iOS/macOS) : bibliothèque SwiftSoup

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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")

Recommendations