Parsing HTML en Swift (iOS/macOS) : bibliothèques SwiftSoup et Fuzi

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) : aperçu des bibliothèques SwiftSoup et Fuzi



Lors du développement d'applications pour iOS et macOS, il est souvent nécessaire d'extraire des données de pages web. Le parsing HTML permet d'obtenir automatiquement du contenu, de le structurer et de l'utiliser dans l'application. Dans l'écosystème Swift, plusieurs bibliothèques puissantes existent à cet effet. Dans cet article, nous allons examiner en détail les deux plus populaires : SwiftSoup et Fuzi. Vous apprendrez comment les installer, comment effectuer des opérations de parsing de base et quelles sont leurs particularités.



Pourquoi le parsing HTML en Swift est-il nécessaire ?

Le parsing HTML est utile dans les scénarios suivants :

  • Agrégation de données — collecte d'actualités, de prix, de descriptions de produits à partir de plusieurs sites.
  • Surveillance des modifications — suivi des mises à jour sur les pages cibles.
  • Intégration avec des services web — si le site ne fournit pas d'API, le parsing est le seul moyen d'obtenir des données.
  • Automatisation des tests — vérification de la conformité de la structure HTML.


Bibliothèque SwiftSoup

SwiftSoup est un port Swift de la célèbre bibliothèque Java Jsoup. Elle fournit une API pratique pour le parsing, la navigation et la manipulation de documents HTML. SwiftSoup prend en charge les sélecteurs CSS, ce qui rend l'extraction d'éléments simple et intuitive.



Installation de SwiftSoup

Ajoutez la dépendance dans votre Package.swift ou via Swift Package Manager dans Xcode :

// Package.swiftdependencies: [    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")]


Exemple d'utilisation de SwiftSoup

Considérons un exemple simple : chargeons une chaîne HTML et extrayons les titres <h2> et les liens <a>.

import SwiftSoup

func parseHTML() { let html = """ <html> <body> <h2>Titre de l'article</h2> <p>Texte du paragraphe.</p> <a href="https://example.com">Lien</a> </body> </html> """ do { let doc = try SwiftSoup.parse(html) // Extraire tous les titres h2 let headers = try doc.select("h2") for header in headers { print("Titre : \\(try header.text())") } // Extraire tous les liens let links = try doc.select("a[href]") for link in links { let linkText = try link.text() let linkHref = try link.attr("href") print("Texte : \\(linkText), URL : \\(linkHref)") } } catch { print("Erreur de parsing : \\(error)") }}

Dans cet exemple, nous utilisons la méthode select() avec le sélecteur CSS "h2" pour sélectionner tous les titres de deuxième niveau, et "a[href]" — pour sélectionner tous les liens avec l'attribut href. La méthode text() renvoie le contenu textuel de l'élément, et attr() — la valeur de l'attribut spécifié.



Navigation dans l'arbre du document

SwiftSoup permet de se déplacer dans l'arbre DOM :

// Obtenir le premier élément h2if let firstHeader = try doc.select("h2").first() {    print("Premier titre : \\(try firstHeader.text())")}

// Obtenir l'élément parentlet parent = try firstHeader.parent()print("Parent : \\(try parent?.tagName() ?? "nil")")

// Obtenir l'élément frère suivantlet nextSibling = try firstHeader.nextElementSibling()print("Élément suivant : \\(try nextSibling?.tagName() ?? "nil")")


Bibliothèque Fuzi

Fuzi est une autre bibliothèque populaire pour le parsing HTML et XML en Swift. Elle est basée sur libxml2 et se distingue par ses hautes performances. Fuzi prend également en charge les sélecteurs CSS et les requêtes XPath.

Recommendations