Pourquoi Swift est le langage idéal pour le parsing dont on ne parle pas
\n\nQuand 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\nDans 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\nQu'est-ce que le parsing et le scraping en Swift ?
\n\nLe 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\nLes 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
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.
Installation et configuration du projet
\n\nPour 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\nOu, si vous travaillez avec SPM sans Xcode, ajoutez simplement la ligne ci-dessus à votre Package.swift.
Une autre méthode consiste à utiliser CocoaPods :
\npod 'SwiftSoup', '~> 2.6.0'\n\nAprès l'installation, importez la bibliothèque dans votre code :
\nimport SwiftSoup\nimport Foundation\n\nPrê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\nUtilisons 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.
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\nNotez 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\nVoici 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\nfunc 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