Parsing en Swift : créez un analyseur de données en 30 minutes

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

Pourquoi Swift est le langage idéal pour le parsing dont on ne parle pas

\n\n

Quand il s'agit de collecter des données sur Internet, tout le monde pense immédiatement à Python avec ses BeautifulSoup et Scrapy. Mais que diriez-vous si je vous disais que Swift, le langage que vous utilisez pour les applications iOS, est tout aussi capable ? Oui, vous avez bien entendu. Le parsing en Swift n'est pas simplement une exotisme, mais un outil puissant qui peut être 2 à 3 fois plus rapide que Python sur des tâches identiques. Et aujourd'hui, nous allons le prouver.

\n\n

Dans cet article, vous apprendrez à configurer l'environnement, à écrire votre premier analyseur en Swift, à gérer les erreurs et à sauvegarder les données. Nous n'utiliserons pas d'abstractions complexes – seulement du code pur et compréhensible que vous pourrez exécuter en moins de 15 minutes.

\n\n

Qu'est-ce que le parsing et le scraping en Swift ?

\n\n

Le parsing Swift est le processus d'extraction de données structurées à partir de pages web ou de documents en utilisant le langage de programmation Swift. Contrairement au web scraping classique en Python, Swift offre une intégration native avec iOS/macOS, ce qui le rend idéal pour créer des applications qui collectent elles-mêmes des données.

\n\n

Les principaux cas d'utilisation du scraping de données Swift :

\n
    \n
  • Collecte des prix sur les sites de commerce électronique pour surveiller la concurrence
  • \n
  • Extraction de coordonnées à partir de sites d'annuaires
  • \n
  • Analyse des flux d'actualités et des blogs
  • \n
  • Création de vos propres API pour les applications (lorsqu'il n'y a pas d'API officielle)
  • \n
\n\n

Pour le parsing en Swift, nous utiliserons deux technologies clés : URLSession pour télécharger les pages HTML et la bibliothèque SwiftSoup pour analyser le document HTML. SwiftSoup est l'équivalent du BeautifulSoup de Python, mais écrit en Swift pur.

\n\n

Installation et configuration du projet

\n\n

Pour commencer, nous devons installer SwiftSoup. Le moyen le plus simple est d'utiliser le Swift Package Manager. Créez un nouveau projet ou ouvrez un projet existant dans Xcode, puis ajoutez la dépendance :

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

Ou, si vous travaillez avec SPM sans Xcode, ajoutez simplement la ligne ci-dessus à votre Package.swift.

\n\n

Une autre méthode consiste à utiliser CocoaPods :

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

Après l'installation, importez la bibliothèque dans votre code :

\n
import SwiftSoup\nimport Foundation
\n\n

Prêt ! Nous pouvons maintenant commencer à écrire l'analyseur.

\n\n

Écrire notre premier analyseur en Swift : pas à pas

\n\n

Écrivons un analyseur qui extrait les titres des articles de la page d'accueil de Hacker News (news.ycombinator.com). C'est un exercice classique pour apprendre le parsing.

\n\n

Étape 1 : Téléchargement de la page HTML

\n\n

Utilisons URLSession pour télécharger les données de manière asynchrone. Swift est un langage avec un fort support de async/await, nous allons donc utiliser cette approche moderne.

\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

Notez que nous retournons une chaîne HTML. Ce sont les données brutes que nous allons analyser.

\n\n

Étape 2 : Analyse du HTML avec SwiftSoup

\n\n

Voici la partie la plus intéressante – l'extraction des données. SwiftSoup fonctionne comme les sélecteurs CSS : vous spécifiez les éléments que vous souhaitez obtenir.

\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

Book Recommendations