تحليل HTML في Swift (iOS/macOS): مكتبة SwiftSoup

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحليل HTML في Swift (iOS/macOS) باستخدام SwiftSoup



عند تطوير تطبيقات iOS وmacOS، غالبًا ما تنشأ الحاجة لاستخراج البيانات من صفحات الويب. على عكس Python مع مكتباته القوية BeautifulSoup وScrapy، لم يكن لدى عالم Swift لفترة طويلة أداة مريحة لتحليل HTML. أصبح الحل هو مكتبة SwiftSoup — وهي منفذ Swift نقي لمكتبة Java الشهيرة Jsoup. توفر واجهة برمجة تطبيقات مريحة للعمل مع مستندات HTML، والتنقل في شجرة DOM، والبحث عن العناصر باستخدام محددات CSS، واستخراج البيانات.



ما هي SwiftSoup؟



SwiftSoup هي مكتبة مفتوحة المصدر تتيح تحليل HTML، واستخراج البيانات وتعديلها، بالإضافة إلى تنظيف HTML من العناصر التي قد تكون خطرة. تعمل على جميع منصات Apple: iOS، macOS، tvOS، watchOS. الإمكانيات الرئيسية:



  • تحليل HTML من سلسلة نصية، رابط URL أو ملف
  • التنقل في شجرة DOM باستخدام محددات CSS
  • استخراج النصوص، السمات، ورمز HTML للعناصر
  • تعديل المستند (إضافة، حذف، تغيير العناصر)
  • تنظيف HTML من هجمات XSS
  • دعم جميع معايير HTML الحديثة


تثبيت SwiftSoup



أسهل طريقة للتثبيت هي عبر Swift Package Manager. أضف التبعية إلى ملف 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"]) ])


إذا كنت تستخدم Xcode، افتح القائمة File → Add Packages...، وأدخل رابط المستودع، ثم اضغط Add Package.



مثال أساسي لتحليل HTML



لننظر إلى مثال بسيط — استخراج عنوان الصفحة:



import SwiftSoup

let html = "<html><head><title>PythonLib - أدوات للمطورين</title></head><body><p>مرحبًا بالعالم!</p></body></html>"

do { let doc = try SwiftSoup.parse(html) let title = try doc.title() print("العنوان: \\(title)") let bodyText = try doc.body()?.text() print("نص body: \\(bodyText ?? "")")} catch Exception.Error(let type, let message) { print("خطأ: \\(type) — \\(message)")} catch { print("خطأ غير معروف")}


الإخراج في وحدة التحكم:

العنوان: PythonLib - أدوات للمطوريننص body: مرحبًا بالعالم!


البحث عن العناصر باستخدام محددات CSS



من نقاط القوة في SwiftSoup هي المحددات القوية المألوفة لمطوري الويب. يمكنك استخدام أي محددات CSS:



let html = """<div class="articles">    <article id="post-1">        <h2 class="title">درس SwiftSoup</h2>        <p class="meta">نُشر: 2024-01-15</p>        <p>محتوى المقال...</p>    </article>    <article id="post-2">        <h2 class="title">تحليل HTML في Swift</h2>        <p class="meta">نُشر: 2024-02-20</p>        <p>محتوى آخر...</p>    </article></div>"""

let doc = try SwiftSoup.parse(html)

// البحث حسب الفئةlet titles = try doc.select(".title")for title in titles { print(try title.text())}

// البحث حسب المعرفif let post = try doc.select("#post-1").first() { let h2 = try post.select("h2").text() let date = try post.select(".meta").text() print("المقال: \\(h2) — \\(date)")}

// محدد مركبlet articles = try doc.select("div.articles > article")

توصيات