لماذا Swift هي اللغة المثالية للتحليل التي لا يتحدث عنها أحد
\n\nعندما يتعلق الأمر بجمع البيانات من الإنترنت، يتبادر إلى ذهن الجميع فورًا لغة Python مع مكتباتها BeautifulSoup وScrapy. ولكن ماذا لو أخبرتك أن Swift، اللغة التي تستخدمها لتطبيقات iOS، قادرة على فعل ما لا يقل عن ذلك؟ نعم، لم تسمع خطأ. تحليل البيانات بلغة Swift ليس مجرد أمر غريب، بل هو أداة قوية يمكنها العمل بسرعة تزيد 2-3 مرات عن Python في نفس المهام. واليوم سنثبت ذلك.
\n\nفي هذه المقالة، ستتعلم كيفية إعداد البيئة، كتابة أول محلل لك بلغة Swift، معالجة الأخطاء وحفظ البيانات. لن نستخدم تجريدات معقدة - فقط كود نقي وواضح يمكنك تشغيله خلال 15 دقيقة.
\n\nما هو التحليل والاستخراج بلغة Swift؟
\n\nتحليل Swift هو عملية استخراج بيانات منظمة من صفحات الويب أو المستندات باستخدام لغة البرمجة Swift. على عكس استخراج الويب التقليدي بلغة Python، تقدم Swift تكاملًا أصليًا مع iOS/macOS، مما يجعلها مثالية لإنشاء تطبيقات تجمع البيانات بنفسها.
\n\nالسيناريوهات الرئيسية لاستخدام استخراج البيانات بلغة Swift:
\n- \n
- جمع الأسعار من المتاجر الإلكترونية لمراقبة المنافسين \n
- استخراج بيانات الاتصال من مواقع الدلائل \n
- تحليل خلاصات الأخبار والمدونات \n
- إنشاء واجهات برمجة تطبيقات خاصة للتطبيقات (عند عدم وجود API رسمي) \n
للتحليل بلغة Swift، سنستخدم تقنيتين رئيسيتين: URLSession لتحميل صفحات HTML ومكتبة SwiftSoup لتحليل مستند HTML. SwiftSoup هي نظير لـ BeautifulSoup الخاصة بـ Python، ولكنها مكتوبة بلغة Swift الخالصة.
تثبيت وإعداد المشروع
\n\nللبدء، سنحتاج إلى تثبيت SwiftSoup. أسهل طريقة هي عبر Swift Package Manager. أنشئ مشروعًا جديدًا أو افتح مشروعًا موجودًا في Xcode، ثم أضف التبعية:
\n\n// في Package.swift\ndependencies: [\n .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")\n]\n\nأو، إذا كنت تعمل عبر SPM بدون Xcode، فقط أضف السطر أعلاه إلى ملف Package.swift الخاص بك.
طريقة بديلة هي استخدام CocoaPods:
\npod 'SwiftSoup', '~> 2.6.0'\n\nبعد التثبيت، قم باستيراد المكتبة إلى كودك:
\nimport SwiftSoup\nimport Foundation\n\nتم! الآن يمكننا البدء في كتابة المحلل.
\n\nكتابة أول محلل بلغة Swift: خطوة بخطوة
\n\nلنكتب محللًا يستخرج عناوين المقالات من الصفحة الرئيسية لـ Hacker News (news.ycombinator.com). هذه مهمة كلاسيكية لتعلم التحليل.
\n\nالخطوة 1: تحميل صفحة HTML
\n\nنستخدم URLSession لتحميل البيانات بشكل غير متزامن. Swift هي لغة تدعم بقوة async/await، لذا سنستخدم النهج الحديث.
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لاحظ: نعيد سلسلة HTML. هذه هي البيانات الخام التي سنقوم بتحليلها.
\n\nالخطوة 2: تحليل HTML باستخدام SwiftSoup
\n\nالآن الجزء الممتع - استخراج البيانات. يعمل SwiftSoup مثل محددات CSS: تحدد العناصر التي تريد الحصول عليها.
\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